我在 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"))
答案 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'));