簡體   English   中英

我如何解決承諾中已經在運行的承諾

[英]How can i resolve an already running promise in my promise

這是我的第一個問題。

我有以下代碼:

const work = async () => {
  const file = new lineByLine(filename);
  let line;

  while (line = file.next()) {
    const worker = await getIdleWorker()
    worker.assign({documentId: line.toString()})
    worker.work()
  }
}


// todo: I need time for resolve other promises meanwhile this is executed.
const getIdleWorker = async () => {
  while (true) {
    for (let i = 0; i < workers.length; i++) {
      const worker = workers[i]

      if (worker.isReady()) {
        return worker;
      }


    // Solution: give time to resolve other promises.
    await sleep(10).milliseconds();
    }
  }
}

worker.work方法將running的屬性設置為true,執行一項工作,准備好后,將running的相同屬性更改為false。 同時,getIdleWorker()搜索具有該屬性running為false的工作程序,該方法永遠等待直到找到空閑工作程序為止。

我想問題是永遠找不到空閑的工作程序,因為諾言worker.work永遠不會得到解決,因為主線程卡在了getIdleWorker中。

哪個是解決此類問題的最佳解決方案? 我不在乎是否必須完全更改設計。

謝謝 !

此實現應該正常工作,它每秒檢查一次空閑的工作程序,如果找到了,則將其返回。

const getIdleWorker = () => {
  return new Promise(resolve => {
    const findFreeWorker = () => {
      for (let i = 0; i < workers.length; i++) {
        const worker = workers[i]
        if (worker.isReady()) {
          return worker;
        }
      }
      return null
    }

    const searchFor = setInterval(() => {
      const freeWorker = findFreeWorker()
      if (freeWorker) {
        clearInterval(searchFor)
        resolve(freeWorker)
      }
    }, 1000)
  })
}

問題是while (true) {阻塞了事件循環,因此Node.js只能永遠執行那段代碼,添加async試圖僅返回Promise,但是代碼處於無限循環中。

在這里您可以找到一篇很好的文章,以更好地了解Node.js的異步模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM