最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

具有某些承诺优先级的承诺队列

运维笔记admin17浏览0评论

具有某些承诺优先级的承诺队列

具有某些承诺优先级的承诺队列

我的代码需要同时执行大量异步操作,并以特定的顺序方式处理它们的承诺。

让我们考虑timeout异步函数,该函数在X秒后超时,并且fetchMyItem1fetchMyItem2返回诺言,当实现时,应根据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秒后超时,...

回答如下:

其中一个必须具有这样的效果:只要履行,就应该改变对其他尚未兑现或尚未兑现的诺言的处理。

发布评论

评论列表(0)

  1. 暂无评论