2016-08-05 6 views
0

http.getがオブジェクトを返すまで私はどのように待つことができますか?http.getがオブジェクトを返すまで待ってください

getData: function(){ 
    let obj = false; 
    http.get("http://...") 
     .accept("application/json") 
     .end(function(err,res){ 
     if(err==null && res.ok){ 
      let js = JSON.stringify(res.body); 
      obj = JSON.parse(js); 
     } 
     }) 
     return obj; 
    }, 

この機能私はvar obj = getData;を呼び出していますが、私は値を印刷するとき、まだ、偽取得しています、最初にその戻り偽、その後、オブジェクトが割り当てられているため、どのようにオブジェクトが割り当てられるまで待ってから、オブジェクトを返しますか? ?

+0

使用は異なっとの約束のようにそれを呼び出すにデータメソッドを取得し、この
変更のような何かを行うことができますJavaScriptの – atul

答えて

1

最も簡単な方法は、フォールバック機能を使用することです。あなたは約束を使用することができますが、それは、余分な必要があります。

変更コールバック関数を受け付ける機能を、その後、get呼び出しが戻ったとき、その関数を呼び出します。

getData: function(cb){ 
    let obj = false; 
    http.get("http://...") 
    .accept("application/json") 
    .end(function(err,res){ 
     if(err==null && res.ok){ 
     let js = JSON.stringify(res.body); 
     obj = JSON.parse(js); 

     if (cb) 
      cb(obj); 
     } 
    }); 
}, 

、その後でそれを呼び出す:

getData(function(obj){ 
    // do something here with the returned object. 
}); 

http.getであるAsyncronousプログラミングは、コールバックと約束の形でイベントを使用します。それで、http.getがイベントを返すのを待ってから、それが戻ったら続行してください。

+0

このソリューションはうまく見えますが、接続が受け入れられない場合、私はwanaを返します。 –

+0

私はちょうど(cb)cb(obj); else cb(obj)?編集:私は試して、それはうまく動作します。どうもありがとう ! :) –

+0

'if(cb)'は単にcbが渡されたことを確認するためのチェックなので、objはオブジェクトかヌル/未定義のいずれかになります。 –

0

あなたhttp.getコールは約束を返す場合、OBJ、あなたは

getData: function(){ 
     let obj = false; 
     return http.get("http://...") 
      .accept("application/json"); 
     }, 

var obj = getData(); 
obj.end(function(err,res){ 
     if(err==null && res.ok){ 
      let js = JSON.stringify(res.body); 
      obj = JSON.parse(js); 
     } 
     }) 
関連する問題