js-challenges
js-challenges copied to clipboard
Promise串行
Promise+async+await
//Promise串行
async function serialPromise(taskarr) {
let res = [];
for (const task of taskarr) {
try {
res.push(await task());
} catch (err) {
res.push(null);
}
}
return res;
}
// 使用reduce
function runPromiseByQueue(myPromises) {
return myPromises.reduce((prev, next) => {
return prev.then(() => next());
}, Promise.resolve());
}
const createPromise = (time, id) => () => new Promise(resolve => {
setTimeout(() => {
resolve(time);
console.log("promise", id);
}, time);
});
runPromiseByQueue().then((res) => {
console.log(res);
});
function promiseSerial(promises) {
let result = Promise.resolve()
// console.log(promises)
promises.forEach(promise => {
// console.log(promise)
result = result.then(() => promise)
})
}
const promises = new Array(4).fill().map((item, index) => {
return new Promise(resolve => {
setTimeout(() => {
console.log(index)
resolve()
}, 2000 * index * Math.random())
})
})
// console.log(typeof promises[0])
promiseSerial(promises)