js语法---setTimeout

function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, 'done');
  });
}

timeout(100).then((value) => {
  console.log(value);
});

问题---第三行

1.setTimeout不是只有两个参数吗?为什么会有三个?
2.根据我的理解,应该这么写,resolve才能把'done'传给then里面的参数,
为什么上面的写法能?

setTimeout(resolve('done'),ms)
//结果是一样的
阅读 2.3k
3 个回答

首先说一下timeout,直接看例子

setTimeout(function(a) {
    console.log(a);
}, 0, 'abc');

这里的参数a只能通过第三个参数传递,你在上面写道setTimeout(resolve('done'),ms)这是错误的,因为传递给setTimeout的第一个参数是resolve('done')的返回值,而resolve函数会立即执行,不会等到倒计时结束,也达不到Promise想要的效果。

你可以改成

setTimeout(() => resolve('done'),ms)

clipboard.png

1.两个问题其实是一个问题。

setTimeout是可以传多个参数的,第三个以及后面的参数会作为回调函数的参数。

setTimeout(code, milliseconds, param1, param2, ...)
code 必需。要调用一个代码串,也可以是一个函数。
milliseconds 可选。执行或调用 code/function 需要等待的时间,以毫秒计。默认为 0。
param1, param2, ...    可选。 传给执行函数的其他参数。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题