web-dev-qa-db-ja.com

約束の後の戻り値

Returnメソッドの後に取得した値を返すjavascript関数があります。説明するよりも見やすい

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

約束を持ってこれを行うための最良の方法は何ですか。私が理解しているように、return valはlookupValueが完了する前に戻りますが、return res.valは内部関数からのみ返されるため、できません。

67
pedalpete

次の線に沿ってパターンを使用します。

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

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

(これは少し冗長ですが、実際のコードはより複雑であると確信しています)

19
SomeKittens

これを行うための最良の方法は、このようにPromiseを返す関数をそのまま使用することです

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

非同期関数を呼び出す関数は、非同期関数が値を返すまで待機できません。なぜなら、非同期関数を呼び出して、その中の残りのコードを実行するだけだからです。そのため、非同期関数が値を返すとき、それを呼び出した同じ関数はその関数を受け取りません。

したがって、一般的な考え方は、非同期関数自体に、非同期関数の戻り値に依存するコードを記述することです。

16
thefourtheye