我在我的解析器中使用 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]
})
)
}
如您所见,我想将数组转换为具有键值的对象
如何映射结果以获取对象而不是数组?
最佳答案
你实际上可以使用 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 });
})
关于angular - promise all 将结果转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175432/