iT邦幫忙

0

Promise.all() 案例: 異步查詢出所有數據後,再一起回傳

  • 分享至 

  • xImage
  •  

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
                })
            } 
        )

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言