最简单的按顺序执行Promise,不接受反驳。

155 阅读1分钟

复制代码到控制台看结果

更新20220527

function test () {
   console.log('start')
    setTimeout(() => {
        console.log('children2')
        Promise.resolve().then(() => {console.log('children2-1')})
    }, 0)
    setTimeout(() => {
        console.log('children3')
        Promise.resolve().then(() => {console.log('children3-1')})
    }, 0)
    Promise.resolve().then(() => {console.log('children1')})
    console.log('end') 
}

test()
// promise.resolve().then() 是一个微任务,放到微任务队列里面
const promiseFc = time => () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(time)
    }, time)
  })
}

const promisesArr = [promiseFc(1000), promiseFc(2000), promiseFc(3000)]

// forEach
let p = Promise.resolve()

promisesArr.forEach(promise => {
  p = p.then(promise).then(res => {
    console.log('faith=============', res)
  })
})

// reduce
function reduceQueuePromises() {
  promisesArr.reduce((pre, cur) => {
    return pre.then(cur).then(res => {
      console.log('faith=============', res)
    })
  }, Promise.resolve())
}
reduceQueuePromises()

// await async

async function awaitAsync() {
  for (const promise of promisesArr) {
    const res = await promise()
    console.log('faith=============', res)
  }
}
awaitAsync()