1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| (() => { const items = [ { "code": 1, "name": "A", "children": [ { "code": 101, "name": "A-a" }, { "code": 102, "name": "A-b" } ] }, { "code": 2, "name": "B", "children": [ { "code": 201, "name": "B-a" }, { "code": 102, "name": "B-b" } ] } ];
async function runPromiseByQueue(listPromises, loop = 0) { for (let itemPromise of listPromises) { await itemPromise(); } if (loop) { await runPromiseByQueue(listPromises, loop); } }
const createPromise = (item, level = 0) => () => new Promise((solve) => { setTimeout(async () => { console.log(level, item.name); if (item.hasOwnProperty("children")) { level++; const curQueue = createQueue(item.children, level); await runPromiseByQueue(curQueue); } solve(); }, 1370); });
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const createQueue = (arr, level = 0) => { return arr.map((item) => { return createPromise(item, level); }); };
const curQueue = createQueue(items);
runPromiseByQueue(curQueue);
})();
|