【发布时间】:2018-11-03 01:13:24
【问题描述】:
我需要使用速率受限的 API。例如,我在一秒钟内只能进行 10 次 API 调用,所以我需要等待当前秒结束才能进行另一个 API 调用。
为了实现这一点,我想创建一个可以自行管理的异步队列。它的主要功能是让我向队列中添加一个新的 Promise,当 Promise 解决时,应用程序会收到通知:
let queue = new Queue()
queue.add(api.get('/somepath')).then(res => { // handle response });
如何使用普通的 Promise 实现这一点?
export class AsyncQueue {
private queue: Array<Promise<any>>;
add(promise, fct) {
this.queue.push(promise);
}
resolveNext() {
this.queue.pop().then({
// how to resolve the waiting promise in my application
})
}
get length() {
return this.queue.length
}
}
【问题讨论】:
-
这听起来像是 Observables 的工作。
-
我认为只使用promise就可以做到吗?
-
看看你的代码,
api.get()会被立即调用。在队列中被pop()ed 后不应该被调用吗? -
为什么不将响应处理承诺链接到 api 调用?
-
它可以用一根针和一只稳定的手来完成,但我通常更喜欢经过实战考验、拥有蓬勃发展的社区的 pubsub,而不是我自己的临时实现。
标签: javascript node.js asynchronous queue es6-promise