Подтвердить что ты не робот

Возвращаемое значение после обещания

У меня есть функция javascript, где я хочу вернуть значение, которое я получаю после метода возврата. Легче видеть, чем объяснять

function getValue(file){
    var val;
    lookupValue(file).then(function(res){
       val = res.val;
    }
    return val;
}

Каков наилучший способ сделать это с обещанием. Как я понимаю, return val вернется, прежде чем lookupValue выполнит это, но я не могу return res.val, поскольку это возвращается только из внутренней функции.

4b9b3361

Ответ 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
});

(хотя это немного избыточно, я уверен, что ваш фактический код более сложный)