1
ノードとMySQLの両方の理解の限界を広げているレポートを作成しようとしています。whileループを約束に変換
私はalready establishedを持っています。私が必要とする年間の日付情報は、毎年私が表示したいと思うように呼び出す必要があります。私は今、私が必要とする正しいデータを返すことができるクエリーを持っています。ノード環境内でそれを繰り返すだけです。 Delphiの背景から、次のコードをカミング
は私がDBサーバ(のgetData)への約束を送信しappropriatly turnoverObj
とdateArray
を移入できるようにする必要があり
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);
}
};
を必要とするデータを私に提供するでしょう。これは、qd
が今日の日付よりも大きくなるまで繰り返す必要があります。これは何とか助け
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.AllをPromiseを配列として設定した後に使用することです。なぜならないのか? –
はい、確かに、私の第二の考えでした。そのような場合、単に 'dates.forEach'ループを実行すると、単一の' date'を使って約束を作成し、それをpromises配列にプッシュすることができます。次に、単に「Promise.all(約束)」をします。 – piotrbienias