Ho una catena promessa con una promessa ricorsivo doAsyncRecursive() al centro in questo modo:concatenamento promessa ricorsiva con un uccello azzurro
doAsync().then(function() {
return doAsyncRecursive();
}).then(function() {
return doSomethingElseAsync();
}).then(function(result) {
console.log(result);
}).catch(errorHandler);
doAsyncRecursive()
ha a che fare qualcosa e se in un primo momento non riesce, io poi dopo voglio provare ogni 5 secondi finché non lo fa. Questo è ciò che la mia funzione promessa assomiglia:
function doAsyncRecursive() {
return new Promise(function(resolve, reject) {
//do async thing
if (success) {
resolve();
} else {
return new Promise(function(resolve, reject) {
setTimeout(function() {
doAsyncRecursive();
}, 5000);
});
}
});
}
Ma quando eseguo, la catena non continuare dopo doAsyncRecursive()
è successo al 2 ° tentativo e resolve()
è chiamata (continua se il tentativo va a buon fine al 1 ° prova però).
Quale motivo ho bisogno per fare questo lavoro?
scusa ma ho problemi a capire questa soluzione perché non so cosa tu significa dalla chiamata async(). forse non ero chiaro - doAsync() e doAsyncRecursive() sono funzioni completamente diverse che fanno diverse attività asincrone, e doAsyncRecursive() sta provando a chiamare doAsyncRecursive() ancora e ancora quando non restituisce la risposta che voglio. era questa la tua comprensione? –
grazie per l'aggiornamento. Ho modificato il mio codice per rifiutare la mia promessa in base a una condizione di test e ho creato una funzione wrapper simile che restituisce la promessa asincrona come suggeriva e ora funziona! Ora vedo come tutto passa per restituire una promessa così la catena può continuare. evviva :) –
Questa soluzione perde memoria su ogni 'catch()'. – kikap