This question already has answers here:
setTimeout(myFunction, 5000); vs setTimeout(myFunction(), 5000);
                            
                                (3个答案)
                            
                    
                2年前关闭。
        

    

如果您能帮助我理解功能setTimeout(),将不胜感激。请参考以下代码:

function doLog() {
  console.log(111);
}

var promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(doLog());
  }, 4000)
});

promise.then(() => {
  setTimeout(function(){
    console.log('DONE');
  }, 3000);
})


它运作完美;首先,我在4秒钟内收到111消息,然后在第一条消息后3秒钟内收到DONE消息。现在,我更改这部分代码(在我看来是为了使其更短):

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/

10-11 12:01