JS:Promise 的resolve在setTimeout中

2020-02-08  本文已影响0人  X4tar
    function cal(){
         return  new Promise((resolve,reject)=>{
              setTimeout(res=>{
                console.log(1);
                resolve(2);
            },2000);
              console.log(3)
          });
      }
      async function a(){
        let r = await cal();
        console.log(r);
        console.log(4);
    }
    a();

,

输出:3 1 2 4
原因:cal() 返回 Promise , await 会等待 Promise 结束(可能是 rejected 或者
resolved ),并取到 reject 或 resolve 的传参,返回给 r 。 resolve() 则会将 Promise 由 pending (进行中)标记为 resolved ,所以 await 会等待 setTimeout。但是如果返回的不是 Promise , await 就会等待了,即使 cal() 里有定义了一个 Promise。

上一篇下一篇

猜你喜欢

热点阅读