1. Promise构造函数是同步还是异步执行,then呢 ?promise如何实现then处理 ?
Promise的构造函数是同步执行的。then 是异步执行的。
promise的then实现,详见: Promise源码实现
2. Promise和setTimeout的区别 ?
Promise 是微任务,setTimeout 是宏任务,同一个事件循环中,promise.then总是先于 setTimeout 执行。同一个事件循环中,promise.then 先于 setTimeout 执行。
3.如何实现 Promise.finnally ?
不管成功还是失败,都会走到finally中,并且finally之后,还可以继续then。并且会将值原封不动的传递给后面的then.
Promise.prototype.finally = function (callback) { return this.then((value) => { return Promise.resolve(callback()).then(() => { return value; }); }, (err) => { return Promise.resolve(callback()).then(() => { throw err; }); }); }
——————————————
“我自己是一名从事了多年开发的web前端老程序员,目前辞职,现在在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,从最基础的到各种框架都有整理,送给每一位想学web前端小伙伴,想要获取的可以添加领取资料企/鹅裙:yidian9567,zixun66、604,即可免费获取。"
4. 如何实现 Promise.all ?
要实现 Promise.all,首先我们需要知道 Promise.all 的功能:
1.如果传入的参数是一个空的可迭代对象,那么此promise对象回调完成(resolve),只有此情况,是同步执行的,其它都是异步返回的。
2.如果传入的参数不包含任何 promise,则返回一个异步完成. promises 中所有的promise都promise都“完成”时或参数中不包含 promise 时回调完成。
3.如果参数中有一个promise失败,那么Promise.all返回的promise对象失败
4.在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组
Promise.all = function (promises) { return new Promise((resolve, reject) => { let index = 0; let result = []; if (promises.length === 0) { resolve(result); } else { setTimeout(() => { function processValue(i, data) { result[i] = data; if (++index === promises.length) { resolve(result); } } for (let i = 0; i < promises.length; i++) { //promises[i] 可能是普通值 Promise.resolve(promises[i]).then((data) => { processValue(i, data); }, (err) => { reject(err); return; }); } }) } }); }
网友评论