标签:new 事件 意思 iter RoCE 回调 let ack nal
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 有什么缺陷,可以如何解决?
标签:new 事件 意思 iter RoCE 回调 let ack nal
原文地址:https://www.cnblogs.com/icyyyy/p/14723428.html