js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

Promise串行

Open Sunny-117 opened this issue 2 years ago • 4 comments

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

Promise+async+await

ouyangbo123 avatar Feb 11 '23 15:02 ouyangbo123

//Promise串行
async function serialPromise(taskarr) {
  let res = [];
  for (const task of taskarr) {
    try {
      res.push(await task());
    } catch (err) {
      res.push(null);
    }
  }
  return res;
}

Banks1y avatar Jun 17 '23 09:06 Banks1y

// 使用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);
});

bobocomeon avatar Oct 15 '23 06:10 bobocomeon

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)

tyust512 avatar Nov 15 '23 07:11 tyust512