Можно ли использовать две 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
, похоже, что вы опрашиваете результат. Было бы лучше, если бы метод просто возвращал обещание, которое выполняется в нужное время. Если это невозможно и вам нужно провести опрос, я бы рекомендовал хотя бы некоторую задержку между вызовами.