• Promise 面试常考手写方法汇总


    前言

    列举面试常考的Promise静态方法

    1.Promise.all
    2.Promise.allSettled
    3.Promise.race
    4.Promise.resolve
    5.Promise.finally
    6.Promise.catch

    没涉及到的可评论补充,我更新文章

    Promise.all

    所有(异步/非异步)任务执行完,必须所有都成功

    Promise.prototype.myAll = (array) => {let result = []let index = 0// 返回promise为了链式调用 return new Promise((resolve, reject) => {// 归纳数据方法function addData(key, value) {result[key] = valueif (++index === array.length) {resolve(result)}}// 遍历数组参数执行异步任务for(let i = 0; i < array.length; i++){let current = array[i]if (current instanceof Promise) {// promise 对象current.then(value => addData(i, value), reason => reject(reason))} else {// 普通值addData(i, array[i])}}})
    } 
    
    • 1
    • 2

    Promise.allSettled

    所有(异步/非异步)任务执行完,不管成功失败都输出,并且附带状态

    Promise.prototype.myAllSettled = (array) => {let result = []let index = 0// 返回promise为了链式调用 return new Promise((resolve, reject) => {// 归纳数据方法function addData(key, status, value) {result[key] = {status, value}if (++index === array.length) {resolve(result)}}// 遍历数组参数执行异步任务for(let i = 0; i < array.length; i++){let current = array[i]if (current instanceof Promise) {// promise 对象current.then(value => {addData(i, 'fulfilled', value)}, reason => {addData(i, 'rejected', reason)})} else {// 普通值addData(i, 'fulfilled', array[i])}}})
    } 
    
    • 1
    • 2

    Promise.race

    输出(异步/非异步)任务执行最快的一个

    Promise.prototype.myRace = (array) => {// 返回promise为了链式调用 return new Promise((resolve, reject) => {// 遍历数组参数执行异步任务for(let i = 0; i < array.length; i++){let current = array[i]if (current instanceof Promise) {// promise 对象current.then(value => resolve(value), reason => reject(reason))} else {// 普通值resolve(current)}}})
    } 
    
    • 1
    • 2

    Promise.resolve

    将给定的值转换为promise对象

    Promise.prototype.myResolve = (value) => {if (value instanceof Promise) { return value;}return new Promise(reslove => reslove(value))
    } 
    
    • 1
    • 2

    Promise.finally

    不管promise成功还是失败,finally方法都会被调用借用then方法拿到promise链式调用结果

    finally(callback) {return this.then(value => {return Promise.resolve(callback()).then(() => value)}, reason => {return Promise.resolve(callback()).then(() => { throw reason })})
    } 
    
    • 1
    • 2

    Promise.catch

    只需要借助then的失败回调

    catch(failCallback){return this.then(undefined, failCallback)
    } 
    
    • 1
    • 2

    基本覆盖常考点,大家需要可继续补充,求点一个赞!

  • 相关阅读:
    聊一聊被 .NET程序员 遗忘的 COM 组件
    解忧云SMS短信服务平台系统 短信发送系统 全解密完美版
    如何借助科技力量,高效驱动产业园运营效率新飞跃
    怎么使用动态代理IP提升网络安全,动态代理IP有哪些好处呢
    web前端、HTML
    关于VS2019启动调试项目时提示拒绝访问
    css实现椭圆绕圈动画
    21天学习挑战:经典算法---算法概念引入
    基于Java的微小企业人事管理系统的设计与实现 毕业设计-附源码231012
    MySQL高频面试题
  • 原文地址:https://blog.csdn.net/web22050702/article/details/126284581