2017-09-28 3 views
0

私はDiscordボットを手伝っていますし、node.jsを使っています。私は2つの別々のjsonフィードから結果を得る必要があり、それに対してrequest-promiseを使用しています。node.jsで2つのリクエスト・プロミスを連鎖させる必要があるものもあります

tableRequest().then(function(val) { 
       console.log(val); 
      }).catch(function(err) { 
       console.err("Something went wrong"); 
      }); 

playersRequest().then(function(val) { 
       console.log(val); 
      }).catch(function(err) { 
       console.err("Something went wrong"); 
      }); 

各機能の先頭は次のようになります。

function tableRequest(){ 
    return new Promise(function(resolve, reject){ 
     request('http://xxx.xxx.xxx.xxx/table', function (error, response, body) { 

私は私のコードを実行すると、データの両方のセットがコンソール罰金に記録されますが、私が読んだから、これは本当に正しいではありません。そして、私はどのように他の2つのvalを使用するのですか?

これは私の特権ではありません。私はDrupalの男です。助けていただければありがとうございます。

答えて

2

私はES7 async/awaitを使用するためにあなたをお勧めします:

コードはその後になります:

async function myFunction() { 
    let val_1 = await tableRequest(); 
    let val_2 = await playersRequest() 
    return {val_1, val_2}; // This way you could use the values 
    // inside another function 
} 

あなたはまだ約束を使用する必要がある場合、あなたはbluebird libraryを使用することができます。青い鳥の約束を使用して、あなたが持っている可能性があり:

const Promise = require('bluebird'); 

Promise.coroutine(function*() { 
    let val_1 = yield tableRequest(); 
    let val_2 = yield playersRequest(); 
    // Now you could use the values 
}) 

、あなたがasync/awaitまたはbluebirdのいずれかを使用しない場合、あなたはこのようなチェーンができます、私はそうで

let val_1, val_2; 
tableRequest().then(val => { 
    val_1 = val; 
    // Do something and return 
    return foo; 
}) 
.then(foo => playersRequest()) 
.then(val => { 
    val_2 = val; 
}) 
.catch(e => console.log(e)) 
+0

うわー見てきました多くの答えと混乱していたので、私は約30分でこれらを試し、うまくいけばうまくいくでしょう。それはよさそうだ。 –

+0

@NiallMurphyさらにチェーンロジックを追加しました –

+1

私のバージョンのノードを更新しなければなりませんでしたが、最終的に非同期/待機がコードに完全に対応しました。ありがとうございました! –

関連する問題