2016-12-05 10 views
0

こんにちは私はいくつかのチェックを行うために2つのAPI呼び出しを行い、両方の呼び出しが完了した後にコードを実行します。2つのAPI呼び出しの後にコードを実行します。

私は(例えばアンダースコアを使用して)このような何かをしたい理想的
var firstCall = request.get('/first', function (error, response, body) { 
    body = JSON.parse(body) 
}) 

var secondCall = request.get('/second', function (error, response, body) { 
    body = JSON.parse(body) 
}) 

if (_.isEmpty(firstCall) && _.isEmpty(secondCall)) { 
    // execute code here because both calls are empty. 
} 

私は要求モジュールのためにそれを行う方法がわから約束を実装する必要がありますが、 - 私を信じません。ありがとうございました。

答えて

2

const get = url => new Promise((resolve, reject) => 
    request.get(url, (error, response, body) => 
    error ? reject(error) : resolve(JSON.parse(body)) 
) 
); 

const firstCall = get('/first'); 
const secondCall = get('/second'); 
Promise.all([firstCall, secondCall]).then(results => { 
    if(_.every(results, _.isEmpty)) { 
    // Do whatever you need to do 
    } 
}) 
+0

こんにちは私はノードv7.0.0を使用していますが、構文に何が問題なのですか? – handsome

+0

@ハンサム:まあ、ES6の構文は使用していないので、古いバージョンのnode.jを使っていると思いました。 'let' /' const'を使う代わりに 'var'を使っています。矢印の関数を使わず、約束を使っていません。構文に間違いはありません。それはちょうどES6以前です。 ご意見:この回答があなたの問題を解決しますか?もしそうであれば、それを受け入れるようにマーキングしてもよろしいですか? – Josep

+0

あなたの説明のために@josepに感謝します。そのためにモジュールを使用する必要がありますか?生の約束を作成するコードを変更することはできますか? – handsome

0

asyncモジュールを使用できます。機能を並列実行する場合はasync.serial、機能を並列実行する場合はasync.parallelを使用してください。コールバック関数で両方の関数を実行した後に実行するはずのコードを書くことができます。 (あなたは私はあなたがノードの古いバージョンを使用しているので、私はES6構文を使用しないことを前提と共有コードに基づく)

var Promise = require('bluebird'); 

function get(url) { 
    return new Promise(function(resolve, reject) { 
    request.get(url, function(error, response, body) { 
     if (error) return reject(error); 
     resolve(JSON.parse(body)); 
    }); 
    }); 
} 

var firstCall = get('/first'); 
var secondCall = get('/second'); 
Promise.all([firstCall, secondCall]).then(function (results) { 
    if(_.every(results, _.isEmpty)) { 
    // Do whatever you need to do 
    } 
}) 

ES6バージョン:約束を使用して

0

asyncのようなpromiseまたはpromiseモジュールを使用できます。

最初に2つのAPIが独立している場合は、async.parallelを使用してください。 async.seriesを使用できます。

async.parallel({ 
    firstCall: function(callback){ 
     request.get('/first', function (error, response, body) { 
      if(error){ 
       return callback(error); 
      }; 
      return callback(null,JSON.parse(body)); 
     }); 
    }, 
    secondCall: function(callback){ 
     request.get('/second', function (error, response, body) { 
      if(error){ 
       return callback(error); 
      }; 
      return callback(null,JSON.parse(body)); 
     }); 
    } 
}, 
function(err, results) { 
    if (_.isEmpty(results.firstCall) && _.isEmpty(results.secondCall))  { 
     // execute code here because both calls are empty. 
    } 
}); 

依存API呼び出しの場合は、async.seriesとなります。

関連する問題