首页 > 解决方案 > setTimeout 函数中的第三个参数是什么?

问题描述

我正在使用 Promise 对象阅读一些代码。

有一个setTimeout函数有三个参数,我想知道第三个参数是做什么的?因为通常它只有两个参数。

代码如下:

function timeout(ms) {
    return new Promise((resolve, reject) => {
        setTimeout(resolve, ms , 'done');
    });
}
timeout(1000).then(value => {
    console.log(value);
});

我注意到第三个参数是传递给resolve函数的,但是为什么我可以在函数中使用它then呢?它是如何工作的?

标签: javascriptes6-promise

解决方案


下面两个例子都可以解释一下

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values); // expected output: Array [3, 42, "foo"]
});

上面的例子可以写成: -

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('foo');
  }, 100)
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values); // expected output: Array [3, 42, "foo"]
});

简而言之,第三个参数是用户需要传递给 setTimeout 的参考函数 [第一个参数] 的参数,它是 promise。我们可以将此功能称为“参数继承”。


推荐阅读