翻译一个while循环到一个承诺

我试图创build一个报告,扩展了我对Node和MySQL的理解。

我已经确定 ,我需要的每年的date信息将需要每年我要显示。 我现在有一个查询可以返回我需要的正确数据,我只需要在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),并适当地填充turnoverObjdateArray 。 这需要重复,直到qd大于今天的date。

您可以使用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); }); 

希望这有助于某种方式。