Piszę kod, który obecnie wygląda tak, ponieważ mam zależności w moim kodzie. Zastanawiam się, czy był to lepszy sposób na zrobienie tego za pomocą Promise.all()? Tu jest mój pseudo kod:Metoda Bluebird's Promise.all(), gdy jedna obietnica jest zależna od innej
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
});
Ważną rzeczą jest to, że muszę użytkownika przed mogę zrobić kolejne dwa połączenia dla getUserProps() i getUserFriends(). Pomyślałem, że mogę użyć Promise.all() do tego tak:
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
})
Ale nie mogę tego uruchomić. Czy to jest właściwy przypadek użycia .all?
Nie działa to dla mnie, ponieważ muszę przekazać zmienną do getUserProps() i nie mam jej, gdy ustawiam zmienną rekwizytu w drugiej linii. – Jeff
@Jeff zmienna użytkownika jest automatycznie przekazywana do funkcji getUserProps, ponieważ jest to wartość obietnicy - podobnie jak w twoim przykładzie. Możesz użyć '.bind', jeśli potrzebujesz przekazać dodatkowe parametry lub funkcję anonimową. –
ohhh .... więc definicja rekwizytów mogła być: var props = user.then (getUserProps (user)); ? – Jeff