gpt4 book ai didi

javascript - setTimeout 函数,以 Promise 解析值作为回调

转载 作者:行者123 更新时间:2023-12-02 18:59:48 25 4
gpt4 key购买 nike

我有一段代码让我很困惑,所以我会尝试将它粘贴到这里并用文字写下我认为它是如何执行的,它可能不正确,所以你可以纠正我。

const wait = function(seconds) {
return new Promise(function(resolve) {
setTimeout(resolve, seconds * 1000);
});
};

wait(1)
.then(() => {
console.log(`1 second passed`);
return wait(1);
})
.then(() => {
console.log(`2 second passed`);
return wait(1);
})
.then(() => {
console.log(`3 second passed`);
return wait(1);
})
.then(() => {
console.log(`4 second passed`);
return wait(1);
})
.then(() => console.log(`5 second passed`));

所以让我困惑的部分是在setTimeout函数中设置'resolve'作为回调,我会尝试一步一步地写,如果错了,你可以纠正我。

  • 第 1 步:我们调用 wait 函数并传递 1 作为秒参数
  • 第 2 步:在函数内部,我们创建一个新的 Promise,其中我们指定只有当 promise 得到解决(履行)时才会发生什么,我们不在乎被拒绝。
  • 第 3 步:在 Promise 构造函数中,我们有 setTimeout 函数,并以解析作为回调,该函数将在 1 秒后调用。
  • 第 4 步:一秒钟过去了,现在我们的 promise 已经实现,then 方法被触发。由于我们的“resolve”是空的,我们不能使用 then 方法的参数,对吗?但是,该方法仍然会在一秒后触发,因此我们可以利用这一点来记录到控制台“1 秒过去了”。
  • 第 5 步:我们返回新的 Promise,以便我们可以链接方法。

最佳答案

除了一个小问题外,你的解释很好:

Since our 'resolve' is empty we can't use 'then' method's argument RIGHT?

可以,只是它的值是未定义。不带参数调用 resolve 的结果与使用 undefined 调用它的结果完全相同:promise 的履行值是值 undefined:

const wait = ms => new Promise(resolve => {
setTimeout(resolve, ms);
});

wait(200)
.then(result => {
console.log(`result is: ${result}`);
});

wait(200)
.then((...args) => {
console.log(`args.length is: ${args.length}`);
});

请注意,即使我们调用不带参数的 resolve,履行处理程序也总是只使用一个参数来调用。

关于javascript - setTimeout 函数,以 Promise 解析值作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65719143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com