Disons que j'ai trois fonctions async:Javascript condition de course pour Promises
functionPromise1, functionPromise2, functionPromise3
Je veux tous les trois être appelés simultanément, avec les détails suivants:
- Si
functionPromise1
est rejetée, arrêter les deux autres fonctions de finition. - Si
functionPromise2
etfunctionPromise3
finissent et sont résolus, passez à la partie suivante du code, mais sifunctionPromise1
est finalement rejetée, ne continuez pas dans le code. SifunctionPromise2
oufunctionPromise3
sont rejetées, ne passez pas à la partie suivante du code.
Mon cas d'utilisation de ces fonctions est que functionPromise1
sert de validation d'entrée que je veux faire synchrone avec d'autres fonctions qui traitent entrée comme cela a déjà validé afin d'accélérer mon processus. Cependant, si l'entrée est à tout moment trouvée invalide par functionPromise1
, je veux terminer le code.
function functionPromise2(...){
return new Promise(function(resolve,reject){
fetchUrl(url, function(err, meta, body){
if (err) { reject(err); } else {
if (body.toString().indexOf(text) !== -1){
resolve();
} else {
reject("Could not find quote");
}
}
});
});
}
function functionPromise3(...) {
return new Promise(function(resolve,reject){
var id = shortid.generate();
var fileName = id+'.png';
webshot(url, fileName, { shotOffset: {left: mouseX, top: mouseY} }, function(err) {
if (err) { reject(err); } else {
resolve({id: id, fileName: fileName});
}
});
});
}
Quand vous dites «synchrone», voulez-vous dire «concurrent»? parce que sinon la question n'a pas de sens. –
@john_omalley Je veux dire concurrente. Je supposais qu'ils étaient synonymes. Je vais le changer maintenant – db2791
@mhodges Cela ne veut-il pas dire qu'ils seraient exécutés de manière asynchrone? – db2791