Sto lavorando a mio modo con le promesse e sono bloccato con il mio caso d'uso. Ho una matrice di funzioni di trasformatore (ogni funzione è una promessa e modifica una struttura JSON).catena di promesse con bluebird
Lasciami mostrare un po 'di codice.
Diciamo questo è mia struttura JSON (array)
var data = [{a: 1, b:2}, {a:3, b:4}];
transformFunction
è definizione di trasformare funzioni modificano i dati in un certo modo. Le due funzioni aggiunge c
e d
struttura alla struttura JSON sopra:
var transformFunctions = { //
transform1: function (data) { // This function adds `c` property to each object from `a`
return new Promise(function (resolve) {
for (var i = 0; i < data.length; i++) {
data[i].c = data[i].a;
}
return resolve(data);
})
},
transform2: function (data) { // This function adds `d` property to each object from `c`
return new Promise(function (resolve) {
for (var i = 0; i < data.length; i++) {
data[i].d = data[i].c;
}
return resolve(data);
})
},
...
}
L'utente da un utente specifica quali funzioni trasformatore dovrebbe usare e in quale ordine. Diciamo prese l'ordine normale in questo modo:
var userTransformList = ['transform1', 'transform2'];
Il metodo transform1
deve modificare i dati e il risultato dovrebbe essere passato al transform2
metodo.
Stavo osservando: Promise.all
ma sembra che non si preoccupi per l'ordine delle promesse, e soprattutto è necessario passare il risultato precedente alla prossima promessa.
Devo solo chiedere, ma perché dovresti usare delle promesse per questo, non è asincrono? – adeneo
L'ho semplificato per la domanda, nel caso reale posso fare una richiesta db o una chiamata ajax lì. – sensor
Non ne sono sicuro, ma dal modo in cui lo descrivi, sembra che tu voglia solo filtrare i dati o qualcosa del genere. Forse qualcuno che ha più esperienza con Bluebird risponderà, l'ho usato solo un po 'per promettere il middleware ecc. – adeneo