翻译一个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),并适当地填充turnoverObj
和dateArray
。 这需要重复,直到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); });
希望这有助于某种方式。