本文共 2199 字,大约阅读时间需要 7 分钟。
excutor函数接收两个回调:resolve和reject。resolve用于定义成功时要执行的函数,resolve中的函数接收成功的值;reject则用于定义失败时要执行的函数,reject中的函数接收失败的原因。
说明:excitor函数会立即被Promise执行,这意味着无论你是在同线程之外的操作(如网络请求),resolve和reject都会在执行器中被立即调用。
onResolved函数接收成功的值;onRejected函数接收失败的原因。then方法返回一个新的Promise对象,允许将当前Promise的结果进行进一步处理。
说明:then方法的第二个参数可以省略,默认为undefined。如果未提供,则失败的情况会以特定方式处理。
catch方法直接处理失败的情况。它是一个then方法的语法糖,等价于调用then时将第一个参数设为undefined。
说明:使用catch方法可以简化代码,更加专注于处理可能出现的错误。
Promise.resolve接受一个值或另一个Promise对象。如果提供的是一个Promise,则返回该Promise;如果提供的是普通值,则会立即以成功状态处理该值。
说明:resolve方法可以将普通值包装成一个成功的Promise,或者将另一个Promise延续到当前Promise中。
Promise.reject接受一个失败的原因。立即返回一个失败的Promise对象,失败原因是你提供的参数。
说明:reject方法通常用于处理异步操作中的错误情况,快速创建一个带有错误信息的失败Promise。
promise是一个包含多个Promise对象的数组。Promise.all的执行规则是:只有当所有的Promise都成功时,result才会是成员的值组成的数组。如果有任意一个Promise失败,then/catch的回调会收到相应的错误信息。
说明:Promise.all适用于处理多个并发操作的结果。它能够高效地处理大量的异步操作,因为它并不会等待任意一个操作完成,而是同时执行所有操作并快速取得结果。
Promise.race接受一个包含多个Promise的数组。它返回一个新的Promise,新的Promise将立即以第一个完成的Promise的状态为结果,无论是成功还是失败。
说明:race方法的主要用途是处理时间敏感性场景,比如网络请求超时处理。当多个请求同时发起时,Race方法可以及时返回第一个完成的结果。
new Promise((resolve, reject) => { setTimeout(() => { resolve('成功的数据'); reject('失败的数据'); }, 1000) }).then(value => { console.log('onResolved()1', value); }).catch(reason => { console.log('onRejected()1', reason); })
const p1 = new Promise((resolve, reject) => { resolve(1); }); const p2 = Promise.resolve(2); const p3 = Promise.reject(3);
p1.then(value => { console.log(value); }); p2.then(value => { console.log(value); }); p3.catch(reason => { console.log(reason); });
const pAll = Promise.all([p1, p2]); pAll.then(values => { console.log('all onResolved()', values); }, reason => { console.log('all onRejected()', reason); });
const pRace = Promise.race([p1, p2, p3]); pRace.then(value => { console.log('race onResolved()', value); }, reason => { console.log('race onRejected()', reason); });
转载地址:http://chckk.baihongyu.com/