承诺后返回值

时间:2014-04-09 01:29:17

标签: javascript node.js promise q

我有一个javascript函数,我想在返回方法后返回我得到的值。 比解释更容易看到

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

承诺的最佳方法是什么?据我了解,return val将在lookupValue完成之前返回,但是我不能return res.val,因为它只是从内部函数返回。

2 个答案:

答案 0 :(得分:16)

沿着这些方向使用模式:

function getValue(file) {
  return lookupValue(file);
}

getValue('myFile.txt').then(function(res) {
  // do whatever with res here
});

(虽然这有点多余,但我确定你的实际代码更复杂)

答案 1 :(得分:15)

执行此操作的最佳方法是使用promise returns函数,就像这样

lookupValue(file).then(function(res) {
    // Write the code which depends on the `res.val`, here
});

调用异步函数的函数不能等到异步函数返回一个值。因为,它只调用异步函数并执行其中的其余代码。因此,当异步函数返回一个值时,它将不会被调用它的同一函数接收。

因此,一般的想法是在async函数本身中编写依赖于async函数返回值的代码。