sincronas reject para nodejs new funciones await async javascript promise bluebird

javascript - reject - Qué usar en lugar de Promise.all() cuando quiere todos los resultados independientemente de cualquier rechazo



promise resolve (2)

Estoy utilizando la biblioteca de promesa Bluebird en un proyecto node.js. Tengo dos operaciones que ambas devuelven promesas y quiero saber cuándo se hacen ambas, ya sea que se resuelvan o rechacen, y necesito los valores de retorno de ambas. Estoy leyendo el contenido de varios archivos y es posible que algunos de ellos no existan y esa es una condición fs.readFileAsync() , así que aunque fs.readFileAsync() fallará si el archivo no existe, aún necesito los resultados de la otra operación de lectura .

Promise.all(p1, p2) rechazará si p1 o p2 rechaza y no creo que necesariamente obtenga los datos del otro.

De todas las otras operaciones de Bluebird ( .some() , .any() , .settle() , etc ...) ¿cuál es la más apropiada para esta situación? Y, ¿cómo se transmiten los datos de manera que pueda decir cuáles tuvieron éxito y cuáles no?


Solo probando diferentes opciones y finalmente pasando por el código en el depurador, descubrí cómo hacerlo usando .settle() :

// display log files app.get(''/logs'', function(req, res) { var p1 = fs.readFileAsync("/home/pi/logs/fan-control.log"); var p2 = fs.readFileAsync("/home/pi/logs/fan-control.err"); Promise.settle([p1, p2]).spread(function(logFile, errFile) { var templateData = {logData: "", errData: ""}; if (logFile.isFulfilled()) { templateData.logData = logFile.value(); } if (errFile.isFulfilled()) { templateData.errData = errFile.value(); } res.render(''logs'', templateData); }).catch(function(e) { console.log("err getting log files"); // figure out what to display here res.render(e); }); });

Si aparece alguien del equipo de Bluebird, al documento de cómo usar .settle() le faltan aproximadamente 2/3 de lo que se necesita para entender cómo usarlo. Hace referencia a PromiseInspection , pero no hace referencia sobre cómo usar eso. Un simple ejemplo de código en el documento para .settle() y cómo se examinan los resultados que .settle() habría ahorrado horas.


Eso sería de hecho ser. .settle . Settle toma una serie de promesas y devuelve instancias de PromiseInspection para todas ellas cuando se resuelven . Luego puede verificar si se cumplen o rechazan y extraer su valor.

Por ejemplo:

Promise.settle([''a.txt'', ''b.txt''].map(fs.readFileAsync)).then(function(results){ // results is a PromiseInspetion array console.log(results[0].isFulfilled()); // returns true if was successful console.log(results[0].value()); // the promise''s return value });

Su caso de uso es más o menos para lo que existe Promise.settle .