2016-08-09 1 views
1
私が反応するアプリで午前

内の変数にアクセスするとaxiosを使用して電話をかけます私は未定義になっています。私は基本的に、変数をグローバルに利用できるようにしたい。私はこのサイトのコールバックに関する他の提案を見ましたが、それらのどれも私を助けることができませんでした。は、コールバック

ご協力いただければ幸いです。

+1

GetDataメソッドは非同期で、JavaScriptはありません。 file.getDataは、コンソールがすでに印刷されているときに、後で結果を返します。単にconsole.log( 'obj-abc'、obj.abc)を追加してください。 file.getDataの内部には、すべてOKと表示されます。 –

+0

** console.log( 'obj-abc'、obj.abc); **を出力しても問題ありませんが、obj.abcの値をgetData )は非同期メソッドであり、componentDidMount()メソッドは完全なgetData()メソッドを待機しません。 –

答えて

1

は単にgetDataメソッドは、非同期であるので

componentDidMount(){ 

var obj = {} 
var res = file.getData(function(abc){ 
    obj['abc'] = abc; 
    console.log('obj-abc ', obj.abc); 
}); 

を入れ、それは必ずしもJavaScriptコードで順次実行されることはありません。この変数はすでにグローバルですが、すぐに使用できるようにしたい場合は、コード実行を続行する前に何らかの種類の完了条件を設定してください。

+0

あなたはどんなタイプの完成条件を提案していますか?私はその価値が世界中で利用可能であることを望んでいました。 – pro

+0

console.logの後のように、 を置くことができます。var isGetDataDone = True; とあなたが(isGetDataDone)場合はこの1つは、単に を入れた後、実行したい他の機能OPが求めているものではありません{ } –

-1

ここではJSを明確にしてください。コードプットアウト

setTimeout(met1, 0); 
console.log("11");  
setTimeout(met2, 0); 
console.log("22"); 

で ルックはこの

11 
22 
met1 output 
met2 output 

ようなので、常に非同期コードは、将来的にではなく、この瞬間に実行されることを心に留めておくだろう。デバッグに多くの時間を節約できます。お役に立てれば。

+0

インチ質問にコメントすることを検討し、回答として投稿しないでください –

+0

私は彼にコメントで答えを与えます。これは、彼がなぜこの問題が現れるのかを理解するためのものです。 –

関連する問題