Returnメソッドの後に取得した値を返すjavascript関数があります。説明するよりも見やすい
function getValue(file){
var val;
lookupValue(file).then(function(res){
val = res.val;
}
return val;
}
約束を持ってこれを行うための最良の方法は何ですか。私が理解しているように、return val
はlookupValueが完了する前に戻りますが、return res.val
は内部関数からのみ返されるため、できません。
次の線に沿ってパターンを使用します。
function getValue(file) {
return lookupValue(file);
}
getValue('myFile.txt').then(function(res) {
// do whatever with res here
});
(これは少し冗長ですが、実際のコードはより複雑であると確信しています)
これを行うための最良の方法は、このようにPromiseを返す関数をそのまま使用することです
lookupValue(file).then(function(res) {
// Write the code which depends on the `res.val`, here
});
非同期関数を呼び出す関数は、非同期関数が値を返すまで待機できません。なぜなら、非同期関数を呼び出して、その中の残りのコードを実行するだけだからです。そのため、非同期関数が値を返すとき、それを呼び出した同じ関数はその関数を受け取りません。
したがって、一般的な考え方は、非同期関数自体に、非同期関数の戻り値に依存するコードを記述することです。