我在解析器中使用了promise.all,它可以工作,但是现在,我不需要一个promise数组,而是一个对象,但是我找不到如何做的事情。
这是我的尝试:
resolve(route: ActivatedRouteSnapshot): Promise<any> {
return Promise.all([
this.service1.getAll(),
this.service2.getAll(),
this.service3.getAll()]
.map((result) => {
first: result[0],
second: result[1],
third: result[2]
})
)
}
如您所见,我想将数组转换为具有键-值的对象
如何映射结果以获取对象而不是数组?
答案 0 :(得分:3)
您实际上可以在此处使用destructring in es6。由于您的Promise.all(...)
将解析为其中包含三个项目的数组,因此可以将[first, second, third]
作为箭头函数的参数,JavaScript会将这些项目从它们在数组中的位置移出并将其设置为具有相应名称(例如first
,second
和third
)的变量。
此外,如果将变量名与对象的属性名保持相同,则可以使用下面的简写语法创建对象。
resolve(route: ActivatedRouteSnapshot): Promise<any> {
return Promise.all([
this.service1.getAll(),
this.service2.getAll(),
this.service3.getAll()
]).then(([first, second, third]) => ({ first, second, third }));
}
作为参考,TypeScript将.then(...)
中的代码转换为以下es5 JavaScript:
.then(function (_a) {
var first = _a[0], second = _a[1], third = _a[2];
return ({ first: first, second: second, third: third });
})
答案 1 :(得分:0)
尝试这种方式
resolve(route: ActivatedRouteSnapshot): Promise<any> {
return Promise.all([
this.service1.getAll(),
this.service2.getAll(),
this.service3.getAll()]
.map((result) => {
this.allData = Object.assign({},result)
})
)
}
我希望这可以帮助您... :)
答案 2 :(得分:0)
您可以使用 ES6 :
const [x,y,z] = ['E','S','6'];
// x = 'E'
// y = 's'
// z = '6'
因此您可以将其用于 Promise.all
const [first, second, third] = await Promise.all([
this.service1.getAll(),
this.service2.getAll(),
this.service3.getAll()
]);