Плохо ли использовать await внутри цикла while? - PullRequest
0 голосов
/ 09 мая 2018

Плохо ли использовать ожидание внутри цикла while?

У меня есть следующий код:

// this is inside a async function
try {
  let res = await api.resource.create(...args) // create resource
  do {
    let res = await api.resource.show(res.body.id)
    if (res.body.status === 'COMPLETED')
      return res.body
  } while(1)
} catch (err) {
  errorHandler(err)
}

У меня есть пара вопросов здесь:

  1. Можно ли использовать две переменные res?
  2. Собираюсь ли я использовать производительность, потому что я использую ожидание внутри цикла while?
  3. Есть ли лучший солютин?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2018

Можно ли использовать две res переменные?

Нет. Как вы используете внутренний, доступ в аргументах всегда находится во временной мертвой зоне 1007 *, и вы всегда получите исключение.

Собираюсь ли я использовать производительность, потому что я использую await внутри цикла while?

Нет ничего плохого в использовании await в циклах, если вы ожидаете, что они будут выполняться последовательно, а не на всех итерациях одновременно.

Есть ли лучшее решение?

try {
  let res = await api.resource.create(...args) // create resource
  do {
    res = await api.resource.show(res.body.id)
  } while (res.body.status !== 'COMPLETED')
  return res.body
} catch (err) {
  errorHandler(err)
}

Также обратите внимание, что если errorHandler исходит из параметра обратного вызова, вы должны отбросить все try / catch и просто использовать .catch(errorHandler) в обещании, возвращенном вызовом.

Кроме того, хотя я не знаю, что делает api.resource.show, похоже, что вы опрашиваете результат. Было бы лучше, если бы метод просто возвращал обещание, которое выполняется в нужное время. Если это невозможно и вам нужно провести опрос, я бы рекомендовал хотя бы некоторую задержку между вызовами.

...