You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constsleep=(time)=>{returnnewPromise((resolve,reject)=>{setTimeout(resolve,time*1000);});};sleep(1000).then(()=>{// 这里写你的骚操作});asyncfunctionsleepAsync(){console.log('fuck the code');awaitsleep(1000);console.log('fuck the code again');}sleepAsync();
Page({init(){Promise.all([this.getArticleList().catch((err)=>{returnerr;}),this.getVideoList(),this.getKnowList(),this.getMessageList(),this.getConcatMsg(),]).then(res)=>{// ...});},getArticleList(){returnnewPromise((resolve,reject)=>{API.getArticle().then((res)=>{reject('Promise.all get Error');});});},});
把 reject 操作换成 resolve(new Error("自定义的 error"))
Page({getArticleList(){returnnewPromise((resolve,reject)=>{API.getArticle().then((res)=>{try{thrownewError('Get res Data Error');resolve(res.data);}catch(error){resolve('Promise.all getArticleList get Error');}resolve({articleList: res.data.data.records.splice(0,5)});});});},});
Page({getArticleList(){returnnewPromise((resolve,reject)=>{API.getArticle().then((res)=>{try{thrownewError('Get res Data Error');resolve(res.data);}catch(error){reject('Promise.all getArticleList get Error');}});});},});
Promise.every=(promiseAry)=>{// 所有的 promise 都错误才触发 rejectreturnnewPromise((resolve,reject)=>{if(!isArray(promiseAry)){returnreject(newTypeError('arguments must be an array'));}letresultAry=[],errorAry=[],index=0,index__error=0;for(leti=0;i<promiseAry.length;i++){Promise.resolve(promiseAry[i]).then((result)=>{index++;resultAry[i]=result;if(index===promiseAry.length){resolve(resultAry);}}).catch((reason)=>{index__error++;errorAry[i]=reason;resultAry[i]=reason;// 都有都错误if(index__error===promiseAry.length){reject(errorAry);}if(index+index__error===promiseAry.length){resolve(resultAry);}});}});};
Promise
Promise.all
Promise.all(iterable) 方法接受一个由 promise 任务组成的数组作为参数,返回一个 Promise 实例。此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败 promise 的结果。
它让我们方便的等待所有异步任务完成一并拿到返回结果,但其中只要有一个 Promise 任务失败则会返回该失败信息,所有的有效结果都拿不到。
要么全部都有,要么一个都没有,在开发中使用到了这样的逻辑我们显然不能接受,需要去想办法拿到有效的 Promise 任务返回信息。
模拟实现
错误处理
Promise.every
, 所有的 promise 都错误才触发 reject, 单个 Promise 中使用 try catch 捕获错误参考
The text was updated successfully, but these errors were encountered: