2017-01-04 8 views
0
function getStuff(serial){ 
    return new Promise(function (fulfill, reject){ 
     request("url using serial", function (error, response, body){ 
     try { 
      fulfill(body); 
     } catch (error) { 
      reject(error); 
     } 
     }, reject); 
    }); 
} 

while(FLAG) { 
    var p = getStuff(x); 
    p.then(function(obj){ 
    console.log(obj) 
    if(some condition on obj) FLAG = false 
    }) 
    //WAIT HERE TILL ITS DONE!!!! 
} 

ループを使用して異なるシリアルで一連の呼び出しを順次実行するにはどうすればよいですか?ノードでhttp getを順次実行する方法

+0

Promises:https://spring.io/understanding/javascript-promisesを見てください。代わりに 'async'ライブラリを使うことができます:http://caolan.github.io/async/ – kkreft

+0

例を表示できますか?約束を使って?私が行った作業に自分のコードを更新します。 – Javier

+0

がコードを更新しました。この約束をどのように使用するかを教えてください – Javier

答えて

2

ノードを使用すると、非同期呼び出しのコードを構造化する必要があります。

kkreftさんのコメントは役に立ちましたか?

仕事ができるあなたのコードの実装は次のようになります。

var x = 1 
var list = [] 
function trial(callback) { 

    http.get("endpoint url", function (err, response) { 
     x++; 
     list.append(response.data); 

     if (err) 
      callback(err); 
     else 
      callback(null, x); 
    }); 
} 

trial(function(err, r) { 
    console.log(r); 
    console.log(list); 
}); 
+0

私の更新されたコードを確認してください。私は約束を管理することに苦労している。 – Javier

1

短い答えは、あなたがいないです。そのような呼び出しから戻って来るデータでやりたいことは、コールバックになければなりません。したがって:

var x = 1 
function trial() { 
    http.get("endpoint url", function (response) { 
    x++; 
    list.push(response.data); 
    console.log(x) // 2 
    }); 

    return x; 
} 
console.log(trial())// 1 

ディスパッチするコールは非同期です。現時点では、コールの結果を待つことができる仕様には何もありません。すべての同期コード(関数外にあるものすべて)は、呼び出しの結果がどれくらい時間がかかっても戻ってくる前に実行されます。したがって、コールバック内のデータや、約束どおりの非同期を管理する何かのデータを処理する必要があります。

+0

更新されたコードを確認してください。私は約束を管理することに苦労している。私は概念を理解していますが、コードに変換しています。 – Javier

関連する問題