javascript - 好奇 setTimeout() 函数如何工作

标签 javascript settimeout

如果您帮助我理解函数 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 秒内解决。

寻求您的帮助:

  1. 为什么要在resolve里面编码立即被处决?因为我相信延迟 4000 被忽略了,如果是的话,请帮助我理解为什么?

  2. 如何 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/

相关文章:

javascript - 在 Gmaps API 上循环标记时 setTimeout 函数不起作用

javascript - 停止 setInterval 并执行其余代码

javascript - Bootstrap 模板中的鼠标悬停淡入淡出效果

javascript - 日历在 Chrome 中无法正确呈现

javascript - ReactJs:使用 Prop 和列表进行样式设置

Javascript 定时器的顺序

JavaScript setTimeout 5 秒

settimeout - 如何在 ionic 旋转器的角度 10 中使用 setTimeout for *ngIf

javascript - 令人困惑的 CSS,谁能解释一下

javascript - 谷歌地图 dragstart 和 dragend 确认