Promise汇总

53 阅读1分钟

Promise场景题

Promise结合reduce实现串行执行:segmentfault.com/a/119000001… 限时函数:leetcode.cn/problems/pr…

延时函数:

// async function sleep(millis) {
//     return new Promise((resolve) => {
//         setTimeout(() => {
//             resolve()
//         }, millis)
//     })
// }
// const t = Date.now()
// sleep(3000).then(() => {
//     console.log(Date.now() - t) // 100
// })

promise实现红绿灯

function light(color, time) {
    return new Promise((resolve) => {
        console.log(color)
        setTimeout(() => {
            resolve()
        }, time)
    })
}
function cycle() {
    return Promise.resolve().then(
        () => light('green', 3000)
    ).then(
        () => light('yellow', 1000)
    ).then(
        () => light('red', 2000)
    ).then(
        () => cycle()
    )
}
cycle()

结合reduce实现串行输出123

function conse(light) {
    light.reduce((pro, item) => pro.then(() => new Promise((resolve) => setTimeout(() => {
        console.log(item)
        resolve()
    }, 1000))), Promise.resolve())
}

conse([1, 2, 3])

实现mergePromise函数 :实现mergePromise函数,把传进去的数组按顺序先后执行,并且把返回的数据先后放到数组data中。

定义一个数组data用于保存所有异步操作的结果 初始化一个const promise = Promise.resolve(),然后循环遍历数组,在promise后面添加执行ajax任务,同时要将添加的结果重新赋值到promise上。

function mergePromise(ajaxArray) {
      // 存放每个ajax的结果
  const data = []
  let promise = Promise.resolve()
  ajaxArray.forEach(ajax => {
    promise = promise.then(ajax).then(res => {
      data.push(res)
      return data // 把每次的结果返回
    }).then(() => {
        console.log(promise)
    })Ï
  })
  // 最后得到的promise它的值就是data
  return promise
}

部分读程题 juejin.cn/post/684490… code.juejin.cn/pen/7238478…

基于PromiseA+实现Promise juejin.cn/post/725031…

实现promise.all & 实现promise.race: juejin.cn/post/717538…

Promise.resolve & promise.then() juejin.cn/post/725031…