将while循环转换为promise

时间:2017-02-01 14:15:19

标签: node.js promise hapijs

我正在尝试创建一个扩展我对Node和MySQL理解的限制的报告。

我有already established我想要显示的每年需要调用我需要的年度日期信息。我现在有一个可以返回我需要的正确数据的查询,我只需要在Node环境中重复这个。

来自Delphi背景,以下代码将为我提供我需要的数据

LoadTurnover = function (req, reply) {

    const queryDay = "-04-06";
    const maxDate  = new Date();
    let queryYear  = 2000;

    let qd        = new Date(queryYear + queryDay);
    let dateArray = [];

    while (qd < maxDate) {     
        // Get the data from the server
        let data = getData(sql);
        // 
        let turnoverObj = {};
        turnoverObj.date = qd;
        turnoverObj.Employees = data[0][0].Employees;
        turnoverObj.Leavers = data[1][0].Leavers;
        // Add current year data to our result set
        dateArray.push(turnoverObj);
        // Setup the next year condition
        queryYear ++;
        qd = new Date(queryYear + queryDay);
    }
};

我需要能够将Promise发送到数据库服务器(getData)并适当地填充turnoverObjdateArray。这需要重复,直到qd大于今天的日期。

1 个答案:

答案 0 :(得分:1)

您可以使用Bluebird承诺的.map()功能:

var Promise = require('bluebird);

let dates = [];
let dateArray = [];

while (qd < maxDate) {
    dates.push(qd);
    queryYear++;
    qd = new Date(queryYear + queryDay);
}

Promise.map(dates, function(singleDate){
    return getData(sql).then(function(data){
        let turnoverObj = {};
        turnoverObj.date = singleDate;
        turnoverObj.Employees = data[0][0].Employees;
        turnoverObj.Leavers = data[1][0].Leavers;

        dateArray.push(turnoverObj);
        return;
    });
}).then(function(finalResult){
    console.log(dateArray);
});

希望这会有所帮助。