[英]typescript promise return after loop
在尝试完成对外部服务的所有调用后,我试图返回,但是我的代码只是通过for循环飞行并返回。 我不能做一个promise.all,因为我需要在循环中获得一些值。 在typescript / angular2中有一种简单的方法吗?
var ret = [];
for (var l in users){
var userLicense = users[l].licenseNumber;
this.callExternalService(userLicense).subscribe(response=>{
ret.push(response+userLicense);
}
}
resolve(ret);
您可以尝试combineLatest
:
return Observable.combineLatest(
...users.map(user => this.callExternalService(user.licenseNumber)
.map(response => response + user.licenseNumber)),
(...vals) => vals);
这将从服务调用中返回可观察到的结果数组,然后您可以订阅这些结果,然后根据需要将其转换为toPromise
的promise等。
如果您需要在循环中进行一些汇总并将其作为返回的一部分传递,则可以将其作为Promise.resolve(aggregatedData)添加到Promise.all中。
像这样:
function getData(ii) {
return new Promise(res => {
res(ii);
});
}
function getUserData(users) {
let promiseArray = [];
let aggregatedData = 0;
users.forEach(user => {
aggregatedData += user.id;
promiseArray.push(getData(user.id));
});
promiseArray.push(Promise.resolve(aggregatedData));
return Promise.all(promiseArray);
}
getUserData([{id:1}, {id:2}, {id:3}]).then(x=>console.log(x))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.