Меня спросили, что я бы предложил.
У вас есть асинхронный результат. Это означает, что ваша функция возвращается задолго до того, как асинхронный результат станет доступен. Следовательно, вы не можете вернуть асинхронный результат напрямую.
Обычно двумя вариантами передачи асинхронного результата являются обратный вызов или возвращение обещания. В любом случае вызывающая функция должна использовать асинхронный результат определенным образом, а не как прямое возвращаемое значение.
В вашем случае вы уже используете обещания, так что имеет смыслэто просто вернуть обещание, которое у вас уже есть:
function name() {
return getName(code).then(...);
}
Нет смысла использовать здесь функцию async
или await
, поскольку у вас есть только одна асинхронная операция, которая уже получила обещание. Просто верни это обещание. Мы не помещаем здесь обработчик .catch()
, потому что на этом уровне не требуется никакой конкретной обработки ошибок - мы хотим, чтобы вызывающее лицо было замечено вызывающей стороной как есть.
Затем, чтобы использовать эту функцию, которая возвращаетобещание, вы можете использовать .then()
на нем:
name().then(result => {
// use the result in here
console.log(result);
}).catch(err => {
console.log(err);
});
или вы можете использовать await
:
async function someOtherFunc() {
try {
let result = await name();
// do something with result here
} catch(e) {
console.log(e);
}
}
Я знаю, что результат доступен внутри.hen body, но я хочу получить к нему доступ внутри области имен функций и вернуть его из функции.
Вы не можете получить к нему доступ вне обработчика .then()
и не можете его вернутьпрямо из функции. Это ограничение асинхронных операций в Javascript. Сама функция возвращает ДО того, как асинхронный обратный вызов даже был вызван, поэтому асинхронный результат недоступен во время возврата из функции. Это то, что обещания для. Вы возвращаете обещание и настраиваете его так, чтобы асинхронный результат был разрешенным значением обещания. Затем вызывающий абонент использует это возвращенное обещание, чтобы зарегистрировать интерес к возможному разрешенному значению (или отклонить ошибку).