前台程序员面试你应该懂的原生JS——3

作者 : 开心源码 本文共1431个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共213人阅读

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

发表回复