У меня есть следующий код в узле v6.3.0, запущенный на api, который запускает два отдельных обещания в зависимости от условности того, существует ли параметр в запросе POST.Сухие обещания в javascript
if (paramExists) {
// call database with this query
User.filter(/* do something with param */)
.then(function (user) {
Data.filter(/* same in both conditions */)
.then(function (data) {
// join data and user
res.send(joinedData);
}) // omit catch for clarity
}) // omit catch for clarity
} else {
// call database with this query
User.filter(/* do something with header */)
.then(function (user) {
Data.filter(/* same in both conditions */)
.then(function (data) {
// join data and user
res.send(joinedData);
}) // omit catch for clarity
}) // omit catch for clarity
}
Я уверен, что есть способ DRY этот код так, что первое обещание в обоих случаях передает пользователю второе обещание, но я не могу понять, каким образом. Должен ли я использовать генератор, или есть способ сделать это с обещаниями, которые я не получаю?
Вы считаете 'Promise.all'. В итоге это выглядит как «var p1 = User.filter (paramExists? Args1: args2), p2 = Data.filter (...); Promise.all ([p1, p2]), затем (функция (пользователь, данные) {...}); ' – numbers1311407
Похоже, вы просите [условия в цепочках обещаний] (http://stackoverflow.com/ д/26599798/1048572)? – Bergi