Ecco un altro introito allo stesso funzionalità: spex.batch
il source code sarebbe troppo per ri-post qui, ecco è solo un esempio dalla batch processing di come usarlo:
var spex = require('spex')(Promise);
// function that returns a promise;
function getWord() {
return Promise.resolve("World");
}
// function that returns a value;
function getExcl() {
return '!';
}
// function that returns another function;
function nested() {
return getExcl;
}
var values = [
123,
"Hello",
getWord,
Promise.resolve(nested)
];
spex.batch(values)
.then(function (data) {
console.log("DATA:", data);
}, function (reason) {
console.log("REASON:", reason);
});
Questo uscite:
DATA: [ 123, 'Hello', 'World', '!' ]
Ora facciamo fallire modificando getWord
a questo:
function getWord() {
return Promise.reject("World");
}
Ora l'output è:
REASON: [ { success: true, result: 123 },
{ success: true, result: 'Hello' },
{ success: false, result: 'World' },
{ success: true, result: '!' } ]
cioè l'intero array è risolta, la segnalazione risultati con indicizzazione.
E se invece di avere segnalato la ragione intera che noi chiamiamo getErrors()
:
console.log("REASON:", reason.getErrors());
allora l'uscita sarà:
REASON: [ 'World' ]
Questo è solo per semplificare l'accesso rapido alla lista degli errori che si sono verificati .
Bello, anche se per ora mi limiterò a utilizzare Q (che probabilmente sta facendo lo stesso). – Zlatko
Riguardo al tuo passaggio 4, come potrei mai sapere rifiutare la nuova promessa? –
@torazaburo hai ragione, non avresti mai rifiutato, questo è il punto di allSettled :) Forse un po 'di timeout, ma questo è un caso d'uso diverso e non riflette ciò che q.allSettled fa. – Zlatko