обещаю всем преобразовать результат в объект - PullRequest
0 голосов
/ 06 ноября 2018

Я использую обещание. Все в моем преобразователе, оно работает, но теперь я не хочу массив обещаний, но объект, но я не могу найти, как это сделать.

Это моя попытка:

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]
      })
  ) 
}

Как видите, я хочу преобразовать массив в объект с ключом-значением

как я могу отобразить результат, чтобы получить объект вместо массива?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

На самом деле вы можете использовать деструкцию в 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 });
})
0 голосов
/ 03 апреля 2019

Вы можете сделать это с помощью 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()
]);
0 голосов
/ 06 ноября 2018

Попробуйте вот так

resolve(route: ActivatedRouteSnapshot): Promise<any> {

 return Promise.all([
this.service1.getAll(),
this.service2.getAll(),
this.service3.getAll()]
  .map((result) => {
    this.allData = Object.assign({},result)
  })
 ) 
} 

Надеюсь, это поможет вам ... :)

Data in object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...