【发布时间】:2021-01-14 12:41:01
【问题描述】:
我有这段代码真的让我很困惑,所以我会尝试将它粘贴在这里并用文字写下我认为它是如何执行的,它可能不正确,所以你可以纠正我。
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`));
所以让我感到困惑的部分是将'resolve'设置为setTimeout函数内部的回调,我会尝试一步一步地写,如果有错误你可以纠正我。
- 第 1 步:我们正在调用等待函数并将 1 作为秒参数传递
- 第 2 步:在函数内部,我们在其中创建了一个新的 Promise 指定只有在承诺得到解决(履行)时才会发生什么,我们 不在乎被拒绝。
- 第 3 步:在 Promise 构造函数中,我们有 setTimeout 函数和 resolve 作为回调,将在 1 秒传递后调用。
- 第 4 步:一秒钟过去了,现在我们的承诺已经实现,
then方法被触发。由于我们的“解决”是空的,我们不能使用then方法的参数对吗?但是,仍然会在一秒钟后触发该方法,因此我们可以利用它来登录到“经过 1 秒”的控制台。 - 第 5 步:我们返回新的 Promise,以便我们可以链接方法。
【问题讨论】:
标签: javascript asynchronous settimeout es6-promise