Promise.resolve使用超时示例正确使用

时间:2017-11-05 17:42:59

标签: javascript ecmascript-6

我已经完成了......"在超时到期之前:

Promise.resolve(setTimeout(() => {
   console.log('print after 3 seconds')
}, 3000))
.then(console.log("done..."))

// Result:
// done...
// print after 3 seconds.

在另一个例子中,它似乎是正确的,那么有什么区别?或者只是巧合?

Promise
    .resolve(console.log("print first"))
    .then(() => {
       console.log("print second")
    })
// Result:
// print first
// print second

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Window.setTimeout不返回Promise,它返回A Number,表示设置的计时器的ID值。将此值与clearTimeout()方法一起使用可取消计时器。

请参阅https://www.w3schools.com/jsref/met_win_settimeout.asp

你完成了,因为当setTimeout完成时,3秒还没有过去。

答案 1 :(得分:0)

您对Promise的使用是错误的,您应该创建一个新的Promise,并在您的逻辑需要时调用resolve函数,在setTimeout结束时调用。



new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('print after 3 seconds');
      resolve();
    }, 1000);
  })
  .then(() => console.log("done..."))