L'opzione più semplice per avere accesso a customer
e processingResult
senza nidificazione sarebbe probabilmente quella di utilizzare async/await
(funzione ES7) come questa (questo dovrebbe essere all'interno di una dichiarazione di funzione async
):
async function someFunction() {
const customer = await GetCustomer();
const processingResult = await ProcessCustomer(customer);
console.log(customer);
console.log(processingResult);
return someValue;
}
// usage
someFunction().then(result => {
// done here
}).catch(err => {
console.log(err);
});
What are the disadvantages of the first approach,
A soli due livelli come questo, non ci sono particolari svantaggi nel nesting. È necessario restituire la promessa interiore per poter ottenere il risultato finale e la gestione completa degli errori. Quindi, per utilizzare correttamente la prima opzione con il nesting, è necessario almeno restituire la promessa interiore in modo da poter rilevare tutti gli errori al livello più alto:
GetCustomer().then(customer => {
return ProcessCustomer(customer).then(processingResult => {
console.log(customer);
console.log(processingResult);
return someValue;
});
}).catch(err => {
// catch all errors here
console.log(err);
});
Se ottieni più livelli, il nesting diventa sempre meno leggibile.
and/or the advantages of the second?
È davvero solo un'opinione personale a questo punto. Personalmente non sono un fan del passaggio di un valore non elaborato a Promise.all()
solo così passerà a un comune .then()
handler. Sembra che il codice sia più complicato di quanto non sia in realtà (ma è solo una mia opinione). Funzionerebbe perfettamente.
Questo è un luogo in cui l'oggetto che distrugge renderebbe le cose un po 'più leggibili e hai bisogno di un .catch()
gestore:
GetCustomer().then(customer => {
return Promise.all([customer, ProcessCustomer(customer)]);
}).then(([customer, processedCustomer]) => {
console.log(customer);
console.log(processedCustomer);
}).catch(err => {
console.log(err);
});
Per una serie di altre opzioni, vedi qui:
Come concatenare e condividere i risultati precedenti Con promesse