Возвращаемое значение после обещания
У меня есть функция javascript, где я хочу вернуть значение, которое я получаю после метода возврата.
Легче видеть, чем объяснять
function getValue(file){
var val;
lookupValue(file).then(function(res){
val = res.val;
}
return val;
}
Каков наилучший способ сделать это с обещанием. Как я понимаю, return val
вернется, прежде чем lookupValue выполнит это, но я не могу return res.val
, поскольку это возвращается только из внутренней функции.
Ответы
Ответ 1
Лучший способ сделать это - использовать функцию возврата обещания так, как она есть, например
lookupValue(file).then(function(res) {
// Write the code which depends on the `res.val`, here
});
Функция, вызывающая асинхронную функцию, не может дождаться, пока функция async вернет значение. Потому что он просто вызывает функцию async и выполняет остальную часть кода в ней. Таким образом, когда функция async возвращает значение, она не будет получена той же самой функцией, которая вызывала бы ее.
Итак, общая идея состоит в том, чтобы написать код, который зависит от возвращаемого значения асинхронной функции, в самой асинхронной функции.
Ответ 2
Используйте шаблон в этих строках:
function getValue(file) {
return lookupValue(file);
}
getValue('myFile.txt').then(function(res) {
// do whatever with res here
});
(хотя это немного избыточно, я уверен, что ваш фактический код более сложный)