Возвращать массив после разрешения обещания - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь решить мою проблему, но у меня больше нет идей. Я хочу создать функцию для возврата массива значений в соответствии с типом переменной.

Я хочу проверить, что параметр, отправляемый в функцию, является массивом строк или массивом элементов данных, и я хочу вернуть этот массив другой функции для его сортировки.

Вот мой код:

  private static returnByType(unSortedElements) {
      var i = 0;
      var unSorted = [];
      if (typeof unSortedElements[0] === 'string') {
          unSorted = unSortedElements;
          return unSorted;
      } else {
          return unSortedElements.each((eachName) => {
              eachName.getText().then((name) => {
                  unSorted[i] = name;
                  i++;
              })
          })

      }

  }

Если я передаю строковый массив этой функции, он возвращает массив с этими строками, но когда я передаю туда список элементов, я получаю пустой массив (в блоке else). Как мне вернуть unSorted из блока else?

1 Ответ

0 голосов
/ 29 октября 2018

Если вы имеете дело с обещанием, вы не можете просто вернуть значение, это всегда будет обещание. Ваш код должен быть примерно таким:

private static returnByType(unSortedElements) {
  var i = 0;
  var unSorted = [];
  if (typeof unSortedElements[0] === 'string') {
      unSorted = unSortedElements;
      // Promise.resolve(unSorted) to unify with else
      return Promise.resolve(unSorted);
  } else {
      // return type will be Promise<[]>
      return Promise.all(unSortedElements.map((eachName) => eachName.getText()));
  }

}

Тип возврата функции теперь будет Promise<[]>. Тогда вы можете использовать его как:

returnByType(args).then((unsorted) => ...);
...