承诺在然后异步运行 setTimeout

时间:2020-12-22 23:11:04

标签: javascript

我在 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"))

1 个答案:

答案 0 :(得分:0)

如果您想以基于 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'));