Sto utilizzando the Q module per Node.js nei tentativi di evitare la "piramide di sventura" in scenari in cui ho molti passaggi. Ad esempio:Come interrompere correttamente una catena di promemoria node.js utilizzando Q?
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
return Q.ncall(task.step2, task);
})
.then(function(result2){
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
In sostanza, questo sembra funzionare; se viene generato un errore da una qualsiasi delle fasi dell'attività, viene passato al callback (anche se sarei benvenuto a miglioramenti, dato che sono nuovo alle promesse di node.js). Tuttavia, ho un problema quando ho bisogno di abortire presto la catena di attività. Ad esempio, se risultato1 viene restituito con successo potrei voler chiamare la callback presto e annullare il resto, ma i miei tentativi in questo senso sono in mancanza di ...
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
if(result1)
{// the rest of the task chain is unnecessary
console.log('aborting!');
callback(null, result1);
return null;
}
return Q.ncall(task.step2, task);
})
.then(function(result2){
console.log('doing step 3...');
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
In questo esempio, vedo entrambi "abortire!" e "facendo il punto 3 ..." stampato.
Sono sicuro che sto semplicemente fraintendendo alcuni principi di base qui, quindi apprezzerei qualsiasi aiuto. Grazie!
Una soluzione che ho trovato è quello di creare una catena di promessa separata dopo la prima catena potrebbe rompersi. Quindi, nell'esempio precedente, l'istruzione .then con result2 viene allegata a Q.ncall per step2, anziché essere allegata alla promessa originale. TUTTAVIA, lo svantaggio principale qui è che si sbarazza di uno dei maggiori vantaggi per Q a mio parere: evitando la piramide del destino! È ancora meglio di nessuna promessa, ma non mi piace la soluzione ... –