2016-09-13 11 views
0

私のNodeJSアプリケーションでは、Postgresへのクエリを作成する必要があり、PG結果のすべての行に対してGET要求を行う必要があります。すべてのGET結果を配列に返します。Postgresクエリを連鎖させ、NodeJSでGETリクエストを約束して使用する

私のコードで何が問題になっていますか?

var promise = require('bluebird'); 
var pgp = require('pg-promise')({ promiseLib: promise }); 
var db = pgp(connectionString); 
var rp = require('request-promise'); 

var query = 'select id from my_table'; 

var processIDs = pgResults => { 
    var requests = pgResults.map(row => rp(`mysite.com/${row.id}`)); 
    return promise.all(requests); 
} 

db.any(query) 
    .then(processIDs) 
    .then(results => console.log(results)); 

2番目の質問は、最終結果配列にPGクエリのIDを含める方法ですか?最終的な結果であなたのPGクエリからIDを含むように

+0

可能な複製()チェーン?](http://stackoverflow.com/questions/28250680/how-do-i-access-previous-promise-results-in-a-then-chain) –

答えて

1

一つの方法は、そのように、processIDsコール内の別の約束を持っていることです。

var processIDs = (result) => { 
    var ids = result.map(row => row.id); 
    var requests = ids.map(id => request(`mysite.com/${id}`)); 
    return promise.all(requests) 
     .then(results => { 
      // not sure how u want to include `ids` in results, but its available in this scope 
      // just think that it's weird, cuz `results` is supposed to be 
      // an array of HTTP responses, right? 
      return results; // results.concat(ids) || results.push(ids) 
     }); 
} 
私は.thenで、前の約束の結果にアクセスするにはどうすればよい[の
+0

ありがとう! とコード全体を動作させる方法は? –

+0

あなたはどんなエラーを出していますか? promise chainに '.catch(err => console.log(err))'呼び出しを含め、エラーがないかどうか確認してください。 – juanmaia

+0

私がリクエストしたサービスにエラーがありました。それは今働く。どうもありがとう! –

関連する問題