账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    await后跟promise和非promise的两种情况下的执行顺序问题
    46
    0
    请看下面代码:async function f1(){ console.log(1) console.log(await 5) console.log(6)}async function f2(){ console.log(3) console.log(await 7) console.log(8)}f1()console.log(2)f2()console.log(4)//执行顺序:1,2,3,4,5,6,7,8可是当我把await 5换成await Promise.resolve(5)时,执行顺序就变了。async function f1(){ console.log(1) console.log(await Promise.reslove(5)) console.log(6)}async function f2(){ console.log(3) console.log(await 7) console.log(8)}f1()console.log(2)f2()console.log(4)//执行顺序:1,2,3,4,7,8,5,6其结果不同了。但是await后跟非promise不是可以把数据包装成promise的吗?为什么在执行顺序上反而不一样呢?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 深情不及久伴 普通会员 1楼

      在JavaScript中,await关键字会阻塞程序,直到Promise被解决。一旦Promise被解决,JavaScript会继续执行后面的代码。

      如果await后面跟的是一个Promise,那么Promise将首先被等待。如果await后面跟的是一个非Promise,那么程序将继续执行,而await不会阻止Promise的解析。

      以下是两种情况下的执行顺序:

      1. 如果await后面跟的是一个Promise,那么Promise将首先被等待。如果Promise被解决,JavaScript会继续执行后面的代码。

      ```javascript async function someFunction() { let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise resolved'); }, 2000); }); await someFunction(); console.log('Promise resolved'); }

      someFunction(); ```

      在这个例子中,someFunction函数创建了一个Promise。然后,await someFunction()将等待Promise被解决。由于someFunction返回的是一个Promise,因此await的顺序不会影响someFunction的执行顺序。

      1. 如果await后面跟的是一个非Promise,那么程序将继续执行,而await不会阻止Promise的解析。

      ```javascript async function someFunction() { let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise resolved'); }, 2000); }); // await someFunction(); 这里将会阻止Promise的解析 }

      someFunction(); ```

      在这个例子中,someFunction函数创建了一个Promise。然后,await someFunction()将会等待Promise的解析。由于someFunction返回的是一个非Promise,因此await的顺序不会影响someFunction的执行顺序。但是,如果someFunction返回的是一个Promise,那么await将会阻止Promise的解析。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部