我需要控制我正在創建的Node.js腳本中的併發性。目前我正在嘗試使用npm promise-task-queue,但我願意接受其他建議。如何控制javascript中的併發性?
我不知道如何在我的代碼中實現promise-task-queue。這是我原來的計劃:
readURLsfromFile().then((urls) => {
urls.reduce((accumulator, current, i) => {
return accumulator.then(() => {
return main(urls[i], i, urls.length)
})
}, Promise.resolve())
})
正如你可以看到我在讀從文件的URL,然後使用。降低()來運行的main()在這些網址中的每一個系列。串行速度太慢,所以我需要通過可控併發來實現。
這裏是我開始使用承諾任務隊列(這是非常錯誤的,我不知道我在做什麼)來編寫代碼:
var taskQueue = require("promise-task-queue");
var queue = taskQueue();
var failedRequests = 0;
queue.on("failed:apiRequest", function(task) {
failedRequests += 1;
});
queue.define("apiRequest", function(task) {
return Promise.try(() => {
return main(urls[i], i, urls.length));
}).then(() => {
return console.log("DONE!");
});
}, {
concurrency: 2
});
Promise.try(() => {
/* The following queues up the actual task. Note how it returns a Promise! */
return queue.push("apiRequest", {url: urls[i], iteration: i, amountToDo: urls.length)});
})
正如你可以看到我已經把我的主()函數的參數後Promise.try,我已經把我的參數後返回queue.push。不知道這是否正確。
但不管現在我卡住了,我如何將所有迭代加載到隊列中?
可能有不同的方式來做你想做的事情。你究竟想要做什麼? – Aron
@Aron我試圖運行使用受控併發的main()。 – JPB