Promise
Promise是異步編程的一種解決方案,它有三種狀態(tài)剃斧,分別是:
- pending:進(jìn)行中
- resolved:已完成
- rejected:已失敗
例如:
function func1(){
...
reurn new Promise((resolve,reject)=>{
try{
//如果成功
resolve(參數(shù));
}catch(e){
//如果失敗
reject(e);
}
});
}
//方法調(diào)用
//func1();
//func1().catch(()=>{});
//var p = func1();
//p.then(res=>{ ... });
func1().then((參數(shù))=>{
//調(diào)用成功
}).catch(err=>{
//調(diào)用失敗
err && console.error(err);
});
async
Async 是一個(gè)流程控制工具包,提供了直接而強(qiáng)大的異步功能。基于JavaScript 為 Node.js 設(shè)計(jì)鸟款,同時(shí)也可以直接在瀏覽器中使用。
Async 流程控制常用的方法有 series茂卦、parallel何什、waterfall
- Async.series(tasks,callback)
用法series方法用于依次執(zhí)行多個(gè)方法,一個(gè)方法執(zhí)行完畢后才會(huì)進(jìn)入下 一方法等龙,方法之間沒(méi)
有數(shù)據(jù)傳遞
- 參數(shù)
tasks:需要執(zhí)行多個(gè)方法处渣。tasks 可以以數(shù)組形式傳入,也可以以 object 對(duì)象形式傳入蛛砰。每個(gè)方法都要一個(gè)回調(diào)方法
callback(err, result):
- 作用:用于處理錯(cuò)誤或進(jìn)入下一方法罐栈。當(dāng)發(fā)生錯(cuò)誤時(shí)(即:err 參數(shù)存在時(shí)),其后的方法會(huì)跳過(guò)暴备,錯(cuò)誤被傳入最終回調(diào)方法中
出錯(cuò)處理方法:出措時(shí)悠瞬,tasks 中拋出的錯(cuò)誤將在此方法中捕獲们豌,錯(cuò)誤被傳入err參數(shù)
不出錯(cuò)處理方法:不出錯(cuò)時(shí)涯捻,tasks 中回調(diào)結(jié)果將被寫(xiě)入 results 參數(shù)中,以數(shù)據(jù)或?qū)ο笮问教峁?/li>
例如:
async function imAsync(num) {
if (num > 0) {
return num // 這里相當(dāng)于resolve(num)
} else {
throw num // 這里相當(dāng)于reject(num)
}
}
imAsync(1).then(function (v) {
console.log(v); // 1
});
// 注意這里是catch
imAsync(0).catch(function (v) {
console.log(v); // 0
})