具有某些承诺优先级的承诺队列
我的代码需要同时执行大量异步操作,并以特定的顺序方式处理它们的承诺。
让我们考虑timeout
异步函数,该函数在X秒后超时,并且fetchMyItem1
,fetchMyItem2
返回诺言,当实现时,应根据timeout
是否已解析执行不同的代码。] >
[在具体情况下,假设有一个客户在柜台等待要交付的物品,或者该客户留下来,我们可以一次带一件物品直接在柜台为他服务,或者客户走了(timeout
),我们必须请服务员来,以便物品到达时,他/她可以将物品带给他。请注意,即使在交付一项商品时,其他项目也应该仍在交付中(承诺尚未兑现),并且在为客户提供一项商品或服务器到达时甚至可能到达(实现)。
这里有一些代码开头
const allItemsToBeDeliveredPromises = [fetchMyItem1(), fetchMyItem2(), ...] const customerLeavesCounterPromise = timeout() const waiter = undefined const allPromisesToBeFulfilled = [...allItemsToBeDeliveredPromises, customerLeavesCounterPromise] // LOOP const itemDeliveredOrVisitorLeft = await Promise.all(allPromisesToBeFulfilled) if hasCustomerLeft(itemDeliveredOrCustomerLeft) { // hasCustomerLeft allows us to detect if the promise that resolved first is `customerLeavesCounterPromise` or not waiter = await callWaiter() } else { // An item has arrived if (waiter) { deliverItemViaWaiter(itemDeliveredOrVisitorLeft) } else { deliverItemAtCounter(itemDeliveredOrVisitorLeft) } } // remove itemDeliveredOrCustomerLeft from allPromisesToBeFulfilled // END loop
我不确定如何为这种情况实现循环。承诺在解决时必须累积到队列中,但是队列中有特定承诺的优先级(超时承诺应在到达时尽快执行,但是如果已经实现了承诺,则在完成当前承诺的处理之后正在处理)
我的代码需要同时执行大量异步操作,并以特定的顺序方式处理它们的承诺。让我们考虑一个超时异步函数,该函数在X秒后超时,...
回答如下:其中一个必须具有这样的效果:只要履行,就应该改变对其他尚未兑现或尚未兑现的诺言的处理。