promise的所有用法
這裏是使用 Promise.all():
當你有多個 Promise 事件需要一起執行與完成時,就可以使用 Promise.all;
所以使用的時候,需要把異步函數組合成函數list;
//異步函數
function getTrackRawData(trackIndex)
{
var trackname = res_tracks[trackIndex]['name'];
var sql = "SELECT count,lat,lon,ele,speed,distance,time,heading from t_race_gpxfiles_rows where gpxfilename =? ORDER by count;";
var params = [trackname];
return new Promise(function(resolve,reject){
//db操作是異步的
db.all(sql, params, (err, rows) => {
//回傳結果後,把結果resolve除去,後續會存到Promise.all()的回傳值中
resolve(rows);
});
})
}
//把函數塞到函數的list中
//make functions to promise
var function_list = [];
for(var i=0;i<res_tracks.length;i++)
{
function_list.push(getTrackRawData(i));
}
//使用promise.all來等待所有函數執行完成
Promise.all(function_list)
.then(
values => {
for(i=0;i<values.length;i++)
{
res_tracks[i]['data'] = values[i];
}
res.json({
"message":"success",
"data":res_tracks
})
}
)