Jef*_*eff 5 javascript promise bluebird
我正在编写一些当前看起来像这样的代码,因为我的代码中有依赖项.我想知道是否有一种更简洁的方法来使用Promise.all()?这是我的伪代码:
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
});
Run Code Online (Sandbox Code Playgroud)
重要的是我需要用户才能为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
})
Run Code Online (Sandbox Code Playgroud)
但我不能让这个工作.这是正确使用的案例.all?
Promise.all() 是为并行操作而设计的,您可以在其中启动一组异步操作以同时运行,然后它会告诉您何时完成所有操作.
它不会以任何方式排序一个与另一个完成.因此,您不能使用它等待用户准备好,然后让其他操作使用该用户.它只是不是为了那样做而设计的.
您可以先获得用户,然后在完成后,您可以使用Promise.all()我认为可以同时运行的其他两个操作,而不是相互依赖.
var user;
someService.getUsername().then(function(username) {
user = username;
return Promise.all(getUserProps(user), getUserFriends(user));
}).then(function() {
// do stuff with results array
}).catch(function() {
// handle errors
});
Run Code Online (Sandbox Code Playgroud)