前台程序员面试你应该懂的原生JS——3
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; }); } }) } }); }

?
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 前台程序员面试你应该懂的原生JS——3