【问题标题】:Translating a while loop to a promise将 while 循环转换为 Promise
【发布时间】:2017-02-01 23:25:58
【问题描述】:

我正在尝试创建一份报告,该报告超出了我对 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);
    }
};

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

【问题讨论】:

    标签: node.js promise hapijs


    【解决方案1】:

    你可以使用Bluebirdpromise的.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);
    });
    

    希望这能有所帮助。

    【讨论】:

    • 不幸的是,我们目前正在使用 ES6 Promises,但如果没有其他选择,这可能会起作用。我想到的另一个方法是在将每个查询设置为数组中的 Promise 之后使用 Promise.All。有什么理由不这样做?
    • 是的,当然,这是我的第二个想法。在这种情况下,您只需执行dates.forEach 循环,您可以在其中使用单个date 创建一个promise 并将其推送到promises 数组。然后简单地做Promise.all(promises)
    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2018-02-22
    • 2017-04-26
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多