如何解决如何在javascript中的函数内动态链接promise?
我有以下练习:
let standInLine = (() => {
return function(logAfter) {
return function b(seconds) {
return new Promise((resolve) => {
setTimeout(() => {
console.log(`${seconds} has passed`)
resolve(b(seconds));
},seconds * 1000);
}) //what to do here to chain the promises
}
}
})();
{
let politeLogAfter = standInLine(logAfter);
politeLogAfter(5);
politeLogAfter(3);
politeLogAfter(4);
}
我需要链接承诺,换句话说,我需要动态链接返回的承诺,我应该在函数 standInLine 中添加 .then() 但我不知道该怎么做,有什么帮助吗? 结果应该是:
暂停 5 秒
记录“5秒过去了”
暂停 3 秒
记录“3 秒过去了”
暂停 4 秒
记录“4 秒过去了”
解决方法
您可以通过始终在其上使用 .then()
将单个 Promise 用作队列:
let standInLine = (() => {
// create a queue
let queue = Promise.resolve();
return function(logAfter) {
return function b(seconds) {
//add to the end of the queue
queue = queue.then(() => new Promise((resolve) => {
setTimeout(() => {
console.log(`${seconds} has passed`)
resolve(b(seconds));
},seconds * 1000);
}))
}
}
})();
const logAfter = 10;
{
let politeLogAfter = standInLine(logAfter);
politeLogAfter(5);
politeLogAfter(3);
politeLogAfter(4);
}
const sleep = (seconds) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
},seconds * 1000)
})
}
const standInLine = async(seconds) => {
await sleep(seconds)
console.log(`${seconds} has passed`)
}
const chain = async() => {
await standInLine(5)
await standInLine(3)
await standInLine(2)
}
chain()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。