[英]How to solve this sequential async task problem in javascript?
在下面的代碼片段中,任務是 object 的任務,function 的定義應該與預期的 output 相匹配。
Let tasks = {
‘a’: {
job: function(finish){
setTimeout(() => {
console.log(‘A done’)
finish();
}, 5000)
},
dependencies: []
},
‘b’: {
job: function(finish){
setTimeout(() => {
console.log(‘B done’)
finish();
}, 2000)
},
dependencies: []
},
‘c’: {
job: function(finish){
setTimeout(() => {
console.log(‘C done’)
finish();
}, 2000)
},
dependencies: [‘a’, ‘b’]
},
‘d’: {
job: function(finish){
setTimeout(() => {
console.log(‘D done’)
finish();
}, 1000)
},
dependencies: []
},
‘e’: {
job: function(finish){
setTimeout(() => {
console.log(‘E done’)
finish();
}, 2000)
},
dependencies: [‘c’, ‘b’]
},
};
// implement a executeTasks function which can be invoked like below
executeTasks(tasks, function(){
console.log(‘all done’);
})
function executeTasks(taskList, callback) {
// write your code here
}
// Expected output
D done
B done
A done
C done
E done
All done
function executeTasks將采用頂部所示示例的任務列表以及回調。 function 的本質是任務將在考慮所有依賴關系的情況下執行,一旦所有任務都執行完畢,傳遞的回調應該調用。 預期的 output 是給定任務列表的結果示例。
使用rxjs
, forkJoin
可能會幫助您優雅地完成它。 https://rxjs.dev/api/index/function/forkJoin
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.