javascript - setTimeout 函数中的第三个参数是什么?
问题描述
我正在使用 Promise 对象阅读一些代码。
有一个setTimeout
函数有三个参数,我想知道第三个参数是做什么的?因为通常它只有两个参数。
代码如下:
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms , 'done');
});
}
timeout(1000).then(value => {
console.log(value);
});
我注意到第三个参数是传递给resolve
函数的,但是为什么我可以在函数中使用它then
呢?它是如何工作的?
解决方案
下面两个例子都可以解释一下
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。我们可以将此功能称为“参数继承”。
推荐阅读
- java - 为什么下载的excel文件不包含任何数据?文件为空
- java - Guava 11:缓存在 5 分钟刷新后不起作用
- vue.js - 从 API 循环和呈现 JSON 数据时出错
- sql-server - 根据另一列过滤一列中的数据值,然后将值插入到同一个 SQL 表中的不同列中
- python - 无法将 JupyterLab 升级到最新版本
- bash - 如何使用 bash 将子文件夹中的所有文件移动到新文件夹中?
- android - 改造总是响应 onFailure
- pycharm - 为什么 JetBrains PyCharm markdown 预览在 Ubuntu 18.04 下出现黄色伪影模糊?
- javascript - 将变量传递给 jQuery 点击处理程序
- async-await - 多个 Async/await JS 函数