promise解决回调地狱。
回调地狱扁平化为promise的链式调用:then无穷返回一个promise实例
实现简单promise
参考材料
- 掘金文章-刷题 https://juejin.cn/post/6844904077537574919#heading-50
- 回调与Promise的代码层级比较 https://www.youtube.com/watch?v=DHvZLI7Db8E&t=615s
e.g.
function cook(stage) { return new Promise((resolve, reject) => { setTimeout(()=>{ resolve(stage) },2000) }) } console.log(`开始`) cook('买菜').then((value) => cook(value + '胡萝卜')) .then((data2) => { console.log(data2,'微任务队列清空') }) console.log('script结束')复制成功
e.g.
function cook(stage) { return new Promise((resolve, reject) => { setTimeout(()=>{ reject(new Error('钱不够')) },2000) }) } console.log(`开始`) cook('买菜').then((data) => { console.log('none') },(error) => { console.er }) console.log('script结束')复制成功
Promise<pending>,则对应then函数不放入微任务队列Promise<resolved>,则入队微任务队列 更多:
// test driven - v1. print(1).then(()=>print(2)).then(()=>print(3)) // 实现 const print = (interval) => { return new Promise( resolve => { setTimeout(() => { console.log(interval) resolve() },interval * 1000) }) }复制成功
`
//test driven - v2.1 print(1, 1).then( data1 => { console.log(data1) return print(2,2) }).then(data2 => { console.log(data2) // ... return print(3,3) }) //实现 let print = (data, delayTime) => { return new Promise(resolve => { setTimeout(()=>{ resolve(data) },delayTime *1000) }) }复制成功
// test driven - v2.2 (async () => { let data1 = await print(1, 1) console.log(data1) let data2 = await print(2, 2) console.log(data2) let data3 = await print(3, 3) console.log(data3) })() // 实现 let print = (data, delayTime) => { return new Promise(resolve => { setTimeout(()=>{ resolve(data) },delayTime *1000) }) }复制成功
待定