js实现promise.all promise.race promise.resolve
最近在准备面试,关于 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相关推荐
- 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)
[学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...
- promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
[简答题]一.谈谈你是如何理解JS异步编程的,EventLoop.消息队列都是做什么的,什么是宏任务.什么是微任务? 如何理解JS异步编程 众所周知JavaScript语言执行环境是"单线程 ...
- 面试必备--手写Promise.all与.race
最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...
- Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行
文章目录 一.Promise 1.认识Promise Promise的实例肯能由三种状态: Promise原型上的方法: Promise的静态方法: then catch async await 练习 ...
- Promise初步详解(resolve,reject,catch
Promise其实是一个构造函数,它有resolve,reject,race等静态方法;它的原型(prototype)上有then,catch方法,因此只要作为Promise的实例,都可以共享并调用P ...
- js 宏观任务和微观任务 promise的代码为什么比setTimeout先执行
这篇文章是通过学习极客时间winter大大的<重学前端>中16| promise里的代码为什么比setTimeout先执行总结而来 宏观任务[MacroTask] 和 微观任务[Micro ...
- promise的优点promise.all(),promise.race(),promise.allSettled()的原理
Promise也是使用回调函数,只不过是把回调封装在了内部,使用上一直通过 then 方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些.Promise出现之前 ...
- js中 浅谈回调地狱 Promise之终极改造代码
Callback helll Promise 异步编程的执行顺序都是不一样的,无法保证代码的顺序: 以下是读取三个文件 const fs=require('fs');fs.readFile('a.tx ...
- 实现一个完美符合Promise/A+规范的Promise
原文在我的博客中:原文地址 如果文章对您有帮助,您的star是对我最好的鼓励- 简要介绍:Promise允许我们通过链式调用的方式来解决"回调地狱"的问题,特别是在异步过程中,通过 ...
最新文章
- 一台主机装两个mysql数据库_一台主机装两个mysql数据库
- 对外汉语语料库有哪些_国内语料库建设一览表
- linux IP 设置
- vue可缓存的单页面多标签页
- 系统运维方案_传统运维 VS 互联网运维 框架体系大观
- java给pdf加水印_java pdf添加水印
- 【转自人人】本科生如何发表论文
- 符号_变压器电路图符号大全
- 消防工程师知识点:规范中关于高差10米的规定汇总(附带练习题)众智博睿
- 大数据在生活中有什么应用(一)
- 备份恢复Lesson 10. Restore and Recovery Concepts
- 【软件工程】 软件工程及开发模型
- 如何申请edi许可证
- HDU 1287.破译密码
- VGG网络讲解——小白也能懂
- 交易系统五:海龟交易法
- icss之继承inherit
- java 向下转型运行时错误_Java向上转型和向下转型
- libcurl dns解析超时和出现段错误问题
- cashe(缓存)【转】
热门文章
- c++ django上传图片
- js文件里获取路由 vue_「如何优雅的使用Vue?」不可不知的Vue实战技巧
- maven java 可执行jar_Maven项目打包成可执行Jar文件
- 语言 上课点名 缺勤_主播日记5 | “云端”传递的C语言程序设计实验课
- vm虚拟机和windows共享文件夹
- centOs7上用yum安装软件报错
- Linux命令详解----iostat
- ) php中_如何在webmin中配置多个PHP版本
- python虚拟环境的作用_python虚拟环境搭建
- mysql的一个字段最多能插入多少数据?我们存入text类型的值上限是多大?