当前位置: 首页 > 知识库问答 >
问题:

javascript - 前端 Promise 问题?

金健
2023-09-27

请大佬帮忙分析一下,以下代码执行顺序(正确的顺序是:a 1 2 3 b 4 c 5):

Promise.resolve()  .then(() => {    console.log('a');    return new Promise(res => res());  })  .then(() => {    console.log('b');  })  .then(() => {    console.log('c');  });Promise.resolve()  .then(() => {    console.log(1);  })  .then(() => {    console.log(2);  })  .then(() => {    console.log(3);  })  .then(() => {    console.log(4);  })  .then(() => {    console.log(5);  });

共有2个答案

黄英韶
2023-09-27

参考
https://segmentfault.com/q/1010000039387146
https://www.zhihu.com/question/453677175

记住return Promise.resolve()return new Promise(resolve => { reolve() })return new Promise(resolve => { reolve() }).then(res => {return res})这三个返回值会卡两次

谷博艺
2023-09-27

以下是对你提供的 JavaScript 代码的执行顺序的分析:

这段代码中,你使用了 Promise 的 then 方法来添加多个回调函数,这些回调函数会在 Promise 解析(resolved)后依次执行。

当 Promise 被解析后,会立即执行第一个 .then() 中的回调函数,然后是第二个,以此类推。

在你提供的代码中,第一个 Promise 被解析后,执行的顺序是:

  1. 'a'(这是第一个 .then() 中的回调函数)
  2. 'b'(这是第二个 .then() 中的回调函数)
  3. 'c'(这是第三个 .then() 中的回调函数)

接着,第二个 Promise 被解析,执行的顺序是:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

所以,正确的执行顺序应该是:a, b, c, 1, 2, 3, 4, 5。

 类似资料:
  • 我有一个vue写的标签 其中,queryByPrimaryKey返回的是一个promise,所以这里用await等待promise的值,因为用到了await,所以外层又需要用async包裹,这样整体函数返回的又是一个promise,那么src属性实际上要的是返回的string值,而不是包裹着string的promise,我如何拿到string值?

  • 第一个问题,这个为什么先输出3后输出2呢 第二个问题,这个为什么会交错输出呢,142536 promise小白一枚,上述两个疑问,希望能得到详细的解答

  • 请问上面这段代码,我想封装成Promise 这种 直接调用this.home_barlist1().then 该怎么改呢? 我改成下面这样 好像不行

  • 怎么替换成红色的值 对象可能有多个

  • 打印2的位置 怎么解释呢

  • 问题内容: 我是一个node.js新手,我试图了解如何以非阻塞方式像节点一样组织一些逻辑。 我有一组环境[‘stage’,’prod’],还有另一组称为品牌[‘A’,’B’,’C’]的参数和一组设备[‘phone’,’tablet’] 。 在节点的回调驱动的世界中,我有这个: 我正在尝试为每个环境构建带有块的报告: 我的问题是,由于这里的所有内容都是如此异步的,尤其是在getTape内部,它调用了