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
}
基于PromiseA+实现Promise juejin.cn/post/725031…
实现promise.all & 实现promise.race: juejin.cn/post/717538…
Promise.resolve & promise.then() juejin.cn/post/725031…