Скажем, у меня есть три асинхронное функции:Javascript гонки условие Promises
functionPromise1, functionPromise2, functionPromise3
Я хочу, чтобы все три, чтобы называться одновременно, со следующими данными:
- Если
functionPromise1
отвергается, остановка остальных двух функций от . - Если
functionPromise2
иfunctionPromise3
оба финишируют и разрешены, перейдите к следующей части кода, но еслиfunctionPromise1
в конечном итоге отклонено, то не входите далее в код. - Если
functionPromise2
илиfunctionPromise3
отклонены, не переходите к следующей части кода.
Мой случай использования этих функций является то, что functionPromise1
служит в качестве входного подтверждения, что я хочу сделать синхронно с другими функциями, которые рассматривают ввод как уже подтверждено для того, чтобы ускорить мой процесс. Однако, если вход в какой-либо точке, признанный недействительным, functionPromise1
, я хочу закончить код.
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});
}
});
});
}
Когда вы говорите «синхронно», вы, возможно, имеете в виду «параллельное»? потому что в противном случае вопрос имеет мало смысла. –
@john_omalley Я имею в виду одновременный. Я предполагал, что они синонимы. Я изменю его сейчас. – db2791
@mhodges. Разве это не означает, что они будут выполняться асинхронно? – db2791