ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Promise

2021-04-30 22:01:29  阅读:143  来源: 互联网

标签:resolve return value promise reject Promise


Promise是一个对象,也是一个构造函数

Promise 解决了什么问题 & 业界实现?回调地狱

Promise 的基础特征?promise 有三个状态:pending,fulfilled,or rejected;

Promise 常用的 API 有哪些?

Promise.resolve():默认产生一个成功的 promise

`static resolve(data){ return new Promise((resolve,reject)=>{ resolve(data); }) }`

Promise.reject():默认产生一个失败的 promise,Promise.reject 是直接将值变成错误结果

`static reject(reason){ return new Promise((resolve,reject)=>{ reject(reason); }) }`

Promise.prototype.catch():捕获 promise 的异常,就相当于一个没有成功的 then

`Promise.prototype.catch = function(errCallback){ return this.then(null,errCallback) }`

Promise.prototype.finally():finally 表示不是最终的意思,而是无论如何都会执行的意思。 如果返回一个 promise 会等待这个 promise 也执行完毕。如果返回的是成功的 promise,会采用上一次的结果;如果返回的是失败的 promise,会用这个失败的结果,传到 catch 中

`Promise.prototype.finally = function(callback) { return this.then((value)=>{ return Promise.resolve(callback()).then(()=>value) },(reason)=>{ return Promise.resolve(callback()).then(()=>{throw reason}) }) }`

Promise.all():解决并发问题的,多个异步并发获取最终的结果(如果有一个失败则失败)

`Promise.all = function(values) { if (!Array.isArray(values)) { const type = typeof values; return new TypeError(`TypeError: ${type} ${values} is not iterable`) } return new Promise((resolve, reject) => { let resultArr = []; let orderIndex = 0; const processResultByKey = (value, index) => { resultArr[index] = value; if (++orderIndex === values.length) { resolve(resultArr) } } for (let i = 0; i < values.length; i++) { let value = values[i]; if (value && typeof value.then === 'function') { value.then((value) => { processResultByKey(value, i); }, reject); } else { processResultByKey(value, i); } } }); }`

Promise.race():用来处理多个请求,采用最快的(谁先完成用谁的)

能不能手写一个符合 Promise/A+ 规范的 Promise?

then 的链式调用&值穿透特性原理 Promise 在事件循环中的执行过程是怎样的?

Promise 有什么缺陷,可以如何解决?

标签:resolve,return,value,promise,reject,Promise
来源: https://www.cnblogs.com/icyyyy/p/14723428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有