最近在准备面试,关于 promise 是面试的热点和考点。不定面试官心情好了就会让你写个 promise 的 api

废话不多说,下面是我写的代码,如有不严谨之处希望指出。

promise.all
当所有 promise 全部 resolve 或者 一个 reject 时,返回结果。

function myPromiseAll(promiseArr) {let length = promiseArr.length;let resolvedNum = 0;let resultArr = [];return new Promise((resolve, reject) => {for (let i = 0; i < length; i++) {Promise.resolve(PromiseArr[i]).then((value) => {resultArr[i] = value;resolvedNum++;if (resolvedNum === length) {return resolve(resultArr);}},(err) => {return reject(err);});}});
}

promise.resolve
如果原本就是 promise 类型的,那么直接返回。如果是有 then 属性的对象,且then属性是个函数的,就返回一个 promise,这个 promise 中的方法用这个 then 属性。如果是一个值的话,就直接作为 promise,且在 resolve 中传入这个值。

function myPromiseResolve(value) {if (value instanceof Promise) {return value;}if (Object.prototype.toString.call(value) === "[object Object]" &&typeof value.then === "function") {return new Promise(value.then);}return new Promise((resolve) => {resolve(value);});
}

promise.race
返回第一个结束的 promise 的值

function myPromiseRace(promiseArr) {let checkFirst = true;return new Promise((resolve, reject) => {for (let i = 0; i < promiseArr.length; i++) {Promise.resolve(promiseArr[i]).then((value) => {if (checkFirst) {checkFirst = false;resolve(value);}},(err) => {if (checkFirst) {checkFirst = false;reject(err);}});}});
}

js实现promise.all promise.race promise.resolve相关推荐

  1. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

  2. promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...

    [简答题]一.谈谈你是如何理解JS异步编程的,EventLoop.消息队列都是做什么的,什么是宏任务.什么是微任务? 如何理解JS异步编程 众所周知JavaScript语言执行环境是"单线程 ...

  3. 面试必备--手写Promise.all与.race

    最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...

  4. Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行

    文章目录 一.Promise 1.认识Promise Promise的实例肯能由三种状态: Promise原型上的方法: Promise的静态方法: then catch async await 练习 ...

  5. Promise初步详解(resolve,reject,catch

    Promise其实是一个构造函数,它有resolve,reject,race等静态方法;它的原型(prototype)上有then,catch方法,因此只要作为Promise的实例,都可以共享并调用P ...

  6. js 宏观任务和微观任务 promise的代码为什么比setTimeout先执行

    这篇文章是通过学习极客时间winter大大的<重学前端>中16| promise里的代码为什么比setTimeout先执行总结而来 宏观任务[MacroTask] 和 微观任务[Micro ...

  7. promise的优点promise.all(),promise.race(),promise.allSettled()的原理

    Promise也是使用回调函数,只不过是把回调封装在了内部,使用上一直通过 then 方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些.Promise出现之前 ...

  8. js中 浅谈回调地狱 Promise之终极改造代码

    Callback helll Promise 异步编程的执行顺序都是不一样的,无法保证代码的顺序: 以下是读取三个文件 const fs=require('fs');fs.readFile('a.tx ...

  9. 实现一个完美符合Promise/A+规范的Promise

    原文在我的博客中:原文地址 如果文章对您有帮助,您的star是对我最好的鼓励- 简要介绍:Promise允许我们通过链式调用的方式来解决"回调地狱"的问题,特别是在异步过程中,通过 ...

最新文章

  1. 一台主机装两个mysql数据库_一台主机装两个mysql数据库
  2. 对外汉语语料库有哪些_国内语料库建设一览表
  3. linux IP 设置
  4. vue可缓存的单页面多标签页
  5. 系统运维方案_传统运维 VS 互联网运维 框架体系大观
  6. java给pdf加水印_java pdf添加水印
  7. 【转自人人】本科生如何发表论文
  8. 符号_变压器电路图符号大全
  9. 消防工程师知识点:规范中关于高差10米的规定汇总(附带练习题)众智博睿
  10. 大数据在生活中有什么应用(一)
  11. 备份恢复Lesson 10. Restore and Recovery Concepts
  12. 【软件工程】 软件工程及开发模型
  13. 如何申请edi许可证
  14. HDU 1287.破译密码
  15. VGG网络讲解——小白也能懂
  16. 交易系统五:海龟交易法
  17. icss之继承inherit
  18. java 向下转型运行时错误_Java向上转型和向下转型
  19. libcurl dns解析超时和出现段错误问题
  20. cashe(缓存)【转】

热门文章

  1. c++ django上传图片
  2. js文件里获取路由 vue_「如何优雅的使用Vue?」不可不知的Vue实战技巧
  3. maven java 可执行jar_Maven项目打包成可执行Jar文件
  4. 语言 上课点名 缺勤_主播日记5 | “云端”传递的C语言程序设计实验课
  5. vm虚拟机和windows共享文件夹
  6. centOs7上用yum安装软件报错
  7. Linux命令详解----iostat
  8. ) php中_如何在webmin中配置多个PHP版本
  9. python虚拟环境的作用_python虚拟环境搭建
  10. mysql的一个字段最多能插入多少数据?我们存入text类型的值上限是多大?