Я пишу код, который в настоящее время выглядит так, потому что у меня есть зависимости в моем коде. Мне было интересно, есть ли более чистый способ сделать это с помощью Promise.all()? Вот мой псевдо-код:Метод Promise.all() Bluebird, когда одно обещание зависит от другого
return someService.getUsername()
.then(function(username) {
user = username;
})
.then(function() {
return someService.getUserProps(user);
})
.then(function(userProps) {
userProperties = userProps;
return someService.getUserFriends(user);
})
.then(function(userFriends) {
friends = userFriends;
})
.catch(error)
.finally(function(){
// do stuff with results
});
Важно то, что мне нужно пользователю, прежде чем я могу сделать второй два вызова для getUserProps() и getUserFriends(). Я думал, что я мог бы использовать Promise.all() для этого, как так:
var user = someService.getUsername()
.then(function(username) {
user = username;
})
var getUserProps = someService.getUserProps(user);
var getUserProps = someService.getUserFriends(user);
return Promise.all(user, getUserProps, getUserFriends, function(user, props, friends) {
// do stuff with results
})
Но я не могу получить эту работу. Это правильный случай для использования .all?
Это не работает для меня, потому что мне нужно передать переменную getUserProps(), и у меня ее нет, когда я устанавливаю переменную реквизита во второй строке. – Jeff
@Jeff Пользовательская переменная автоматически передается функции getUserProps, так как это значение разрешения обещания - точно так же, как в вашем примере. Вы можете использовать '.bind', если вам нужно передать дополнительные параметры или анонимную функцию. –
ohhh .... так что определение реквизита могло бы быть: var props = user.then (getUserProps (пользователь)); ? – Jeff