angular - promise all 将结果转换为对象

标签 angular promise

我在我的解析器中使用 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 会将项目从数组中的位置中取出,并将它们设置为具有相应名称的变量(即 firstsecondthird 在这种情况下)。

此外,如果您保持变量名称与对象的属性名称相同,您可以使用下面的简写语法来创建对象。

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/

相关文章:

html - Angular 6,ngStyle 指令中来自 css 文件的颜色

javascript - ReactJs Promise + Ajax 返回值

javascript - 异步 API 是否应该同步抛出?

javascript - AngularJS : Adding variable into a chain of promises

javascript - Angular2 : how to prevent exception on specific file like zone. js?

angular - 如何在 PrimeNG 自动完成文本框的 `onBlur` 事件上将值传递给我的组件?

jquery - 如何在 angular 2 中使用 jQuery 和 javascript

angular - 空注入(inject)器错误 : No provider for StateObservable when using ng-packagr

javascript - 嵌套的 Promise 以及如何绕过它们

javascript - 如何知道动态 "iterable"参数中的所有 Promise 何时已解决?