Promise 与 await 组合使用

Posted lmxxlm-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise 与 await 组合使用相关的知识,希望对你有一定的参考价值。

看例子就行了,废话不多说!
 
async function checkStatus(name)
  return new Promise((resolve,reject) =>
      var that = this;
      this.timer = setTimeout(()=>
        // clearTimeout(that.timer); -- todo 这里取消注释会有问题,难道timer冲突了?
        if(name === "success") resolve(true);
        else reject(false);
      ,500);
  );
 
async function doSth()
 
  /*
    正常使用的时候 :
      可以用then来接收resolve的结果;
      使用catch接受reject的结果
  */
 
  console.log(‘===== 使用Promise.then 接收resolve返回的结果 =====‘);
  var ret_s = checkStatus(‘success‘);
  ret_s.then(res => console.log(‘use Promise.then() , return :‘ ,res) );
 
  console.log(‘===== 使用Promise.catch 接收reject返回的结果 =====‘);
  var ret_err = checkStatus(‘ss‘);
  ret_err.catch(res => console.log(‘use Promise.catch() , return :‘,res));
  
 
  console.log(‘\r\n‘);
 
  /*
    使用await 的时候:
      不需要使用then来接收resolve的结果,直接就得到了结果
      对于reject的结果,采取静默处理. 只能通过try-catch来捕获
    和Promise的另外一个不同是,下面这两个调用是串行的,而不是像上面两个例子是并行的.
  */
 
  console.log(‘===== 使用Promise.then 接收resolve返回的结果 =====‘);
  var res_s = await checkStatus(‘success‘);
  console.log("await success result :",res_s);
 
  console.log(‘===== 使用await 接收reject返回的结果 =====‘);
  try
    await checkStatus(‘fail‘);
  catch(res_err)
    console.log(‘await handle the reject result :‘,res_err);
  
  
 
doSth(); 

以上是关于Promise 与 await 组合使用的主要内容,如果未能解决你的问题,请参考以下文章

asyncawait与Promise

promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

简单理解JavaScript 的async/await

Promise 与 await 组合使用

首先会发生啥:setTimeout 0 或 await Promise.resolve?

从地狱到天堂,Node 回调向 async/await 转变