Sto utilizzando Node.js e Bluebird per creare una logica abbastanza complicata che implica la decompressione di un file strutturato, l'analisi di JSON, la creazione e la modifica di diversi documenti MongoDB e la scrittura di file correlati in più posizioni. Ho anche una gestione degli errori abbastanza complicata per tutto questo a seconda dello stato del sistema quando si verifica un errore.Gestione delle dipendenze delle promesse
Ho difficoltà a pensare a un buon modo per gestire le dipendenze attraverso il flusso di promesse.
mio codice esistente appare sostanzialmente in questo modo:
var doStuff = function() {
var dependency1 = null;
var dependency2 = null;
promise1()
.then(function (value) {
dependency1 = value;
return promise2()
.then(function (value) {
dependency2 = value;
return promise3(dependency1)
.then(successFunction);
});
})
.catch(function (err) {
cleanupDependingOnSystemState(err, dependency1, dependency2);
});
};
Nota che Dependency1 non è necessario fino promise3, e che il gestore degli errori ha bisogno di conoscere le dipendenze.
A me sembra un codice spaghetti (e il mio codice effettivo è molto peggiore con un flusso di controllo parallelo molto elevato). Ho anche letto che restituire un'altra promessa all'interno di una. Callback è un antipattern. Esiste un modo migliore/più pulito per realizzare ciò che sto cercando di fare?
Questo è probabilmente meglio per programmers.stackexchange.com per essere un uomo onesto. – 1252748
'promise2' dipende dal completamento di' promise1'? Il codice lo sottintende, ma è un po 'oscuro. – loganfsmyth
Sì, qualsiasi promessa successiva dipenderà da qualcosa che una promessa precedente ha fatto/dati che ha recuperato. –