Promise
Promise是异步编程的一种解决方案,它有三种状态,分别是:
- pending:进行中
- resolved:已完成
- rejected:已失败
例如:
function func1(){
...
reurn new Promise((resolve,reject)=>{
try{
//如果成功
resolve(参数);
}catch(e){
//如果失败
reject(e);
}
});
}
//方法调用
//func1();
//func1().catch(()=>{});
//var p = func1();
//p.then(res=>{ ... });
func1().then((参数)=>{
//调用成功
}).catch(err=>{
//调用失败
err && console.error(err);
});
async
Async 是一个流程控制工具包,提供了直接而强大的异步功能。基于JavaScript 为 Node.js 设计,同时也可以直接在浏览器中使用。
Async 流程控制常用的方法有 series、parallel、waterfall
- Async.series(tasks,callback)
用法series方法用于依次执行多个方法,一个方法执行完毕后才会进入下 一方法,方法之间没
有数据传递
- 参数
tasks:需要执行多个方法。tasks 可以以数组形式传入,也可以以 object 对象形式传入。每个方法都要一个回调方法
callback(err, result):
- 作用:用于处理错误或进入下一方法。当发生错误时(即:err 参数存在时),其后的方法会跳过,错误被传入最终回调方法中
出错处理方法:出措时,tasks 中抛出的错误将在此方法中捕获,错误被传入err参数
不出错处理方法:不出错时,tasks 中回调结果将被写入 results 参数中,以数据或对象形式提供
例如:
async function imAsync(num) {
if (num > 0) {
return num // 这里相当于resolve(num)
} else {
throw num // 这里相当于reject(num)
}
}
imAsync(1).then(function (v) {
console.log(v); // 1
});
// 注意这里是catch
imAsync(0).catch(function (v) {
console.log(v); // 0
})