2016-10-24 3 views
0

Я использую Q.js для обещаний. В следующем коде каждый метод вызывает ajax-вызов, а затем возвращает обещание. Все работает, как ожидалось с каждым методом выполнения и завершения до следующего начала:Обещания: Как выполнить методы асинхронного доступа, а затем выполнить метод

functionOne().then(junctionTwo) 
       .then(functionThree) 
       .then(doSomethingElse); 

То, что я действительно хотел бы, однако, для functionOne, functionTwo и functionThree всем выполняться одновременно и «doSomethingElse» должен быть выполнен только тогда, когда первые 3 метода завершены.

Как вы это делаете с обещаниями/Q.js?

ответ

1

Вы можете использовать теперь стандартизированный Promise.all() сказать вам, когда массив обещаний все сделано:

Promise.all([functionOne(), functionTwo(), functionThree()]).then(function(results) { 
    // all are done here 
    doSomethingElse(); 
}).catch(function(err) { 
    // error in at least one promise here 
}); 

Или, если вы 'все еще использую синтаксис библиотеки Q, тогда вы можете использовать Q.all(), который делает то же самое.

Q.all([functionOne(), functionTwo(), functionThree()]).then(function(results) { 
    // all are done here 
    doSomethingElse(); 
}).catch(function(err) { 
    // error in at least one promise here 
}); 

Вы должны знать, что в node.js или браузере, нет «одновременно», потому что JS однопоточен (за пределами webWorkers, которые не используются здесь). Но, если ваши операции асинхронны (что я предполагаю, так как они возвращают обещания), то они могут все три в полете одновременно, хотя в любой момент времени выполняется только один.

+1

Почему downvote? Похоже, серийный downvoter, так как вопрос и все ответы все получили downvotes. Странно не иметь объяснений. Трудно улучшить ваш ответ, если никто не предлагает никаких оснований для того, почему они считают, что он заслуживает понижения. Downvotes могут быть просто карательными или они могут способствовать улучшению, которое приносит пользу всему сообществу, объясняя, что вы считаете неправильным. – jfriend00

+0

Возможно, он наказал вас за ответ (вместо того, чтобы голосовать, чтобы закрыть) плохо изученный вопрос? Мы не можем знать, голоса субъективны. Я могу только утверждать, что объективно нет ничего плохого в содержании вашего ответа, вы получили мой +1. – Bergi

+0

Как это плохо исследованный вопрос? Любой вопрос, который имеет известный ответ, можно назвать «плохо исследованным» тем, у кого есть ответ, не так ли? Благодаря jfriend00 и kouak. Я не знал, что это было добавлено на этот язык. – Sean

Смежные вопросы