一、Promise、Promise.all、Promise.race
Promise用于发送异步请求时,针对不同返回结果(成功/失败)的处理。
Promise 用法
function fn(){return new Promise((resolve, reject)=>{成功时调用 resolve(数据)失败时调用 reject(错误)})}fn().then(success, fail).then(success2, fail2)
Promise.all 用法
Promise.all([promise1, promise2]).then(success1, fail1)
promise1和promise2都成功才会调用success1
Promise.race 用法
Promise.race([promise1, promise2]).then(success1, fail1)
promise1和promise2只要有一个成功就会调用success1;
promise1和promise2只要有一个失败就会调用fail1;
总之,谁第一个成功或失败,就认为是race的成功或失败。
二、手写一个Promise
Promise 有三种状态:Pending 初始; Fulfilled 成功; Rejected 失败。
function Promise(executor) {let self = this;self.status = 'pending'; //等待态self.value = undefined; //成功的返回值self.reason = undefined; //失败的原因function resolve(value){if(self.status === 'pending'){self.status = 'resolved';self.value = value;}}function reject(reason) {if(self.status === 'pending') {self.status = 'rejected';self.reason = reason;}}try{executor(resolve, reject);}catch(e){reject(e);// 捕获时发生异常,就直接失败}}//onFufiled 成功的回调//onRejected 失败的回调Promise.prototype.then = function (onFufiled, onRejected) {let self = this;if(self.status === 'resolved'){onFufiled(self.value);}if(self.status === 'rejected'){onRejected(self.reason);}}module.exports = Promise;
