如果您帮助我理解函数 setTimeout()
,我将不胜感激。请引用以下代码:
function doLog() {
console.log(111);
}
var promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(doLog());
}, 4000)
});
promise.then(() => {
setTimeout(function(){
console.log('DONE');
}, 3000);
})
它工作得很好;首先我得到111
4 秒后消息,然后我收到 DONE
第一条消息后 3 秒内发送消息。现在我更改这部分代码(在我看来,目的是使其更短):
var promise = new Promise((resolve, reject) => {
setTimeout(resolve(doLog()), 4000)
});
问题描述:resolve
里面的代码立即执行,而我预计它会在 4 秒内解决。
寻求您的帮助:
为什么要在
resolve
里面编码立即被处决?因为我相信延迟 4000 被忽略了,如果是的话,请帮助我理解为什么?如何
function(){}
包装有助于防止resolve()
不立即执行吗?
我非常感谢您的帮助,祝大家编码愉快!
最佳答案
setTimeout(() => {
resolve(doLog());
}, 4000)
上面的代码意味着“使用文本 () => {resolve(doLog()) }
创建一个函数,并将其传递给 setTimeout
所以我的新函数可以在4秒内运行。运行时,调用doLog,并将结果传递给resolve。
setTimeout(resolve(doLog()), 4000)
上面的代码意思是“立即调用doLog()
,并将其结果传递给resolve
。将resolve
的结果传递给setTimeout
这样,如果 resolve()
的结果恰好是一个函数,该函数可以在 4 秒内运行” 实际上,resolve() 的返回值为 不是一个函数,所以 4 秒后什么也不会发生。
关于javascript - 好奇 setTimeout() 函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619793/