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

1. Promise构造函数是同步还是异步执行,then呢 ?promise如何实现then处理 ?

Promise的构造函数是同步执行的。then 是异步执行的。

promise的then实现,详见: Promise源码实现

前端程序员面试你应该懂的原生JS——3_第1张图片

2. Promise和setTimeout的区别 ?

Promise 是微任务,setTimeout 是宏任务,同一个事件循环中,promise.then总是先于 setTimeout 执行。同一个事件循环中,promise.then 先于 setTimeout 执行。

前端程序员面试你应该懂的原生JS——3_第2张图片

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,即可免费获取。"

前端程序员面试你应该懂的原生JS——3_第3张图片

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; }); } }) } }); }

前端程序员面试你应该懂的原生JS——3_第4张图片

你可能感兴趣的:(前端程序员面试你应该懂的原生JS——3)