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

承诺某些回调优先的回调队列

运维笔记admin10浏览0评论

承诺某些回调优先的回调队列

承诺某些回调优先的回调队列

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

我的意思是“特定的顺序方式” ==>假设您以该顺序启动promise promise1promise2promise3,并且promise3首先解析,然后promise2然后是我想要的依次处理promise3promise2promise1

让我们考虑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

我不确定如何为这种情况实现循环。承诺在解决时必须累积到队列中,但是队列中有特定承诺的优先级(超时承诺应在到达时尽快执行,但是如果已经实现了承诺,则在完成当前承诺的处理之后正在处理)

我的代码需要同时执行大量异步操作,并以特定的顺序方式处理它们的承诺。我的意思是“特定顺序方式” ==>假设您正在开始...

回答如下:

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

发布评论

评论列表(0)

  1. 暂无评论