• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

Promise

开发技术 开发技术 2周前 (04-30) 7次浏览

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 有什么缺陷,可以如何解决?


程序员灯塔
转载请注明原文链接:Promise
喜欢 (0)