promse 并发
const fn = function (time) { return () => { return new Promise((resolve) => { setTimeout(() => { console.log(Date.now() + ':' + time); resolve(time); }, time * 1000); }) } } const fnArray = []; for (let i = 0; i < 10; i += 1) { fnArray.push(fn(i)); } const schedule = async (fnArray, limit) => { const dataReult = []; const runStack = [...fnArray]; let startNewIndex = limit - 1; const run = async (fn, index, retry = 3 ) => { if (index > fnArray.length - 1 ){ return; } if (startNewIndex > fnArray.length - 1 ){ return; } if (!retry) { dataReult[index] = -1; return; } try { const data = await fn(); dataReult[index] = data; } catch (err) { console.error(err); return run(fn, index, retry--); } startNewIndex++; const newFn = runStack[startNewIndex]; const newRetry = 3; return run(newFn, startNewIndex, newRetry) } const fns = []; for (let i = 0; i < limit; i++) { fns.push(run(fnArray[i], i, 3)); } await Promise.all(fns); console.log(dataReult); } schedule(fnArray, 2);