【问题标题】:Promise running setTimeout in then asynchronously [duplicate]承诺在然后异步运行 setTimeout [重复]
【发布时间】:2021-04-01 15:33:35
【问题描述】:

我在 IFFE 中返回一个 Promise,首先记录的是 first,但随后立即记录了 third,然后是 second。如果我的 setTimeout 在 then 中,那里面的所有东西不都是同步运行的吗?

(() => {
    return new Promise(resolve => {
       console.log("first")
       resolve()
    })
    .then(() => {
       setTimeout(() => console.log("second"), 3000)
    })


})()
.then(() => console.log("third"))

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果您想以基于 Promise 的方式使用 setTimeout,您必须在那里创建另一个 Promise 并在 setTimeout 回调中解决它,如下所示:

    new Promise(resolve => setTimeout(resolve, 3000));
    

    或者在上下文中:

    new Promise(resolve => {
      console.log('first');
      resolve();
    })
      .then(
        () =>
          new Promise(resolve =>
            setTimeout(() => {
              console.log('second');
              resolve();
            }, 3000)
          )
      )
      .then(() => console.log('third'));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2023-03-17
    • 2019-11-06
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多