Node.js 用于循环和pg蓝鸟

Node.js 用于循环和pg蓝鸟,node.js,bluebird,pg,Node.js,Bluebird,Pg,如何使用pg bluebird()合并for循环 我想首先获取每个位置的id、纬度和经度(从位置表)。然后,对于每个位置,我需要执行一个http请求(这是我想要for循环的地方)。然后,在我完成请求之后,收到的数据应该插入表Aeris中 我不熟悉node.js,只是学习了一些承诺。我是否按照预期使用pg bluebird 以下是我目前掌握的情况: var request = require("request"); var Pgb = require("pg-bluebird"); export

如何使用pg bluebird()合并for循环

我想首先获取每个位置的id、纬度和经度(从位置表)。然后,对于每个位置,我需要执行一个http请求(这是我想要for循环的地方)。然后,在我完成请求之后,收到的数据应该插入表Aeris中

我不熟悉node.js,只是学习了一些承诺。我是否按照预期使用pg bluebird

以下是我目前掌握的情况:

var request = require("request");
var Pgb = require("pg-bluebird");

exports.retrieve = function(){

  var pgb = new Pgb();

  var cnn;

  pgb.connect(DB_URL)
  .then(function (connection) {

    cnn = connection;
    var queryString = 'SELECT id, latitude, longitude FROM locations';

    return cnn.client.query(queryString);
 })
 .then(function (result) {

    console.log(result.rows);

    //this needs to run for each location 
    //this needs to access result.rows[0].id then 
    //result.rows[1].id and so on
    location_id = result.rows.id; 

    lat = result.rows.latitude;
    lng = result.rows.longitude;
    console.log("Lat=" + lat + " Lng=" + lng);
    var aerisUrl = AERIS_URL+
        "?p="+lat+","+lng+
        "&radius=10miles"+
        "&client_id="+CLIENT_ID+
        "&client_secret="+CLIENT_SECRET;

    request.get(aerisUrl,function(err,response,body){

        //do something with request data
    });

    return cnn.client.query();

})
.then(function (result, aerisResults) {
        //insert data in aeris table
        return cnn.client.query(queryString);
})
.then(function (result){

    console.log(result.rows);

    cnn.done();
})
.catch(function (error) {

      console.log(error);
});
首先,用于与数据库的通信。其次,您需要将http请求逻辑分离为一个函数,该函数将返回一个承诺,因此您可以将所有此类请求堆叠到一个数组中,然后通过
promise.all
执行。所有这些都显示在下面的代码中

var request = require("request");
var promise = require("bluebird");
var pgp = require("pg-promise")({promiseLib: promise});

var db = pgp(DB_URL);

function createRequest(r) {

    var aerisUrl = AERIS_URL +
        "?p=" + r.latitude + "," + r.longitude +
        "&radius=10miles" +
        "&client_id=" + CLIENT_ID +
        "&client_secret=" + CLIENT_SECRET;

    return new promise.Promise(function (resolve, reject) {
        request.get(aerisUrl, function (err, response, body) {
            // do something with the request data and
            // then call either resolve(), if successful,
            // or reject(), if failed;
        });
    });
}

db.query("SELECT id, latitude, longitude FROM locations")
    .then(function (rows) {
        var req = rows.map(function (r) {
            return createRequest(r);
        });
        return promise.all(req);
    })
    .then(function (data) {
        // all http requests resolved successfully,
        // time to insert the data into table Aeris:
        return db.query("insert into Aeris(fields) values($1, $2,...)", [/*values*/]);
    })
    .then(function () {
        // successfully inserted data into table Aeris;

        // all done!
    })
    .catch(function (error) {
        // Ops, something failed;
        console.log("ERROR:", error);
    });
首先,用于与数据库的通信。其次,您需要将http请求逻辑分离为一个函数,该函数将返回一个承诺,因此您可以将所有此类请求堆叠到一个数组中,然后通过
promise.all
执行。所有这些都显示在下面的代码中

var request = require("request");
var promise = require("bluebird");
var pgp = require("pg-promise")({promiseLib: promise});

var db = pgp(DB_URL);

function createRequest(r) {

    var aerisUrl = AERIS_URL +
        "?p=" + r.latitude + "," + r.longitude +
        "&radius=10miles" +
        "&client_id=" + CLIENT_ID +
        "&client_secret=" + CLIENT_SECRET;

    return new promise.Promise(function (resolve, reject) {
        request.get(aerisUrl, function (err, response, body) {
            // do something with the request data and
            // then call either resolve(), if successful,
            // or reject(), if failed;
        });
    });
}

db.query("SELECT id, latitude, longitude FROM locations")
    .then(function (rows) {
        var req = rows.map(function (r) {
            return createRequest(r);
        });
        return promise.all(req);
    })
    .then(function (data) {
        // all http requests resolved successfully,
        // time to insert the data into table Aeris:
        return db.query("insert into Aeris(fields) values($1, $2,...)", [/*values*/]);
    })
    .then(function () {
        // successfully inserted data into table Aeris;

        // all done!
    })
    .catch(function (error) {
        // Ops, something failed;
        console.log("ERROR:", error);
    });

代码的当前状态是什么?它为您产生了什么?代码的当前状态是什么?它为您生产什么?谢谢!地图功能正是我所需要的。谢谢!map函数正是我所需要的。