この質問は何度も尋ねられます。しかし、まだ私はものを得ることができません。非同期コールバック関数から値を返す方法は?
私はコールバックからいくつかの価値を得たいと思っています。明確にするために、下のスクリプトを見てください。
function foo(address){
// google map stuff
geocoder.geocode({ 'address': address}, function(results, status) {
results[0].geometry.location; // I want to return this value
})
}
foo(); //result should be results[0].geometry.location; value
「未定義」という値を返すようにしようとするとします。私はSOからのいくつかのアイデアに従ったが、 はまだ失敗する。
ものは以下のとおりです。
function foo(address){
var returnvalue;
geocoder.geocode({ 'address': address}, function(results, status) {
returnvalue = results[0].geometry.location;
})
return returnvalue;
}
foo(); //still undefined
ここにいる人[**この質問を最初にお読みください**](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call)この問題に効果的に取り組む方法について説明します。 –
** [変数を関数内で修正した後に変数が変更されないのはなぜですか? - 非同期コードリファレンス](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron)**は、手元にある問題のより一般的で詳細な説明。 –
angularJsに付属している$ q libraryのように、Qまたはその変形を使用してください。そして振り返ってはいけません。非同期関数は直ちにundefinedを返します。だから決してあなたの時間を無駄にすることを試みること無駄にしないでください。また、通常と同じように、非同期関数では 'return'キーワードを使用しないでください。代わりに、延期された約束を使用してください。 deferred.resolve(あなたがやりたいSTUFF)、後で単純にそれを返すことができます。 'return deferred.promise; ' :) – ISONecroMAn