Promise.all()替代,允许失败?

据我所知,Promise.all()并行地执行所有的事情,并在任何一个Promise中的第一个错误实例中返回一个错误。

现在如果我想同时运行所有的承诺,并等待他们完成,即使他们中的一个失败了呢?

有一个Promise方法或模块,我应该使用?

我发送一堆用户并行FCM推送通知和.then()排队如果其中任何一个失败是不是打算。

我正在做我的代码

//then chain .then(()=>{ let startChatPromises = []; for (let i = 0 ; i < queue_length ; i ++){ startChatPromises.push(matchUsers(some_key,some_key)); } return Promise.all(startChatPromises); }).then(()=>{// Continue processing even after failure ?}); let matchUsers = (room_id,...user_ids) => { let chat_key = admin.database().ref().child("chats").child(room_id).push().key; let participants = {}; user_ids.forEach(user_id=> { participants[`${user_id}`] = true; }); return admin.database().ref().child("chats").child(room_id).child(chat_key).update({ "last_message_ts" : new Date().getTime(), "participants" : participants }).then(()=>{ //Get Users let getFCMTokenPromises = []; user_ids.forEach(user_id => { getFCMTokenPromises.push(admin.database().ref("users").child(user_id).child("fcm_id").once('value')); }); return Promise.all(getFCMTokenPromises); }).then(results => { // Send Push Notifications let tokens = []; results.forEach(snapshot=>{ if (snapshot.val() !== undefined && snapshot.val() !== null && snapshot.val() !== "") tokens.push(snapshot.val()); }); const payload = { data: { NOTIFICATION_TYPE: 'START_CHAT', CHAT_UID: chat_key } }; return admin.messaging().sendToDevice(tokens, payload); }).catch(()=>{ return true; }) }; 

你可以做这样的事情:

 function allSkippingErrors(promises) { return Promise.all( promises.map(p => p.catch(error => null)) ) } 

这将解决所有带有错误的Promise对象到结果数组中的null 。 您还可以使用.catch(error => error)保留Error对象,最后检测失败,或者使用{ status, result, error }属性parsing对象。