我與我所相信的嘗試是promise-queue承諾隊列處理亂序
var Queue = require("promise-queue")
let queue = new Queue();
//add first item to queue
queue.add(() => {
console.log('start 1');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('finished processing');
resolve();
},
5000);
});
});
//add second item to queue
queue.add(() => { console.log('start 2'); });
導致輸出基本用例:
>start 1
>start 2
>finished processing
的第二個項目之前,首先啓動項目已完成。我錯過了什麼?
試試這個代碼示例runkit
您注意到調用堆棧和隊列,這使得JavaScript的非常特殊的作用。您的代碼在大約20ms內執行整個文件。 JS解釋器命中第5行並記錄1,然後將承諾加載到隊列中,然後立即執行'start 2',然後在5秒後立即解決承諾。 – agm1984
我現在正在查看您的代碼,但我不知道承諾隊列如何工作以正確推理您應該做什麼。 – agm1984
也許嘗試將它添加到代碼的頂部,因爲它可能允許兩者同時運行:'const maxConcurrent = 1; const maxQueue = 1; const queue = new Queue(maxConcurrent,maxQueue);' – agm1984