美文网首页互联网科技Web前端之路
前端程序员面试你应该懂的原生JS——3

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

作者: 易懂程序猿 | 来源:发表于2019-05-23 19:50 被阅读2次

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

    相关文章

      网友评论

        本文标题:前端程序员面试你应该懂的原生JS——3

        本文链接:https://www.haomeiwen.com/subject/rtfizqtx.html