如何解决创建异步函数队列
我有一个异步函数,它发出一个请求makeRequest(): Promise<string>
。基本上,我想让对该函数的调用排队,以便一次只发出一个请求。
async function queueRequest(): Promise<string> {
await ... // some code to make sure all previous requests have already been completed
const result = await makeRequest();
return result;
}
实现这种目标的最佳方法是什么?
预先感谢
解决方法
此摘录来自MDN page on Promises。他们也紧跟着我下面的几个例子,以便对此有所扩展。
使用一些聪明的JavaScript可以进行顺序组合:
[func1,func2,func3].reduce((p,f) => p.then(f),Promise.resolve())
.then(result3 => { /* use result3 */ });
基本上,我们将异步函数的数组简化为与Promise.resolve()。then(func1).then(func2).then(func3);等效的Promise链。
Here是一篇很好的文章,介绍了如何使用reduce()
实现顺序承诺的这一目标。与MDN文档相比,它能很好地完成整个过程并更好地解释每一步。
要做到这一点,您需要使用一个数组来移动任务并推送新的传入任务。
我会使用fastq
来避免重新实现管理队列数据结构的所有逻辑。
这里有个例子:
screen
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。