Promise和async的总结

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

  1. 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
})

你可能感兴趣的:(Promise和async的总结)