等待函数执行完成,然后再继续输入打字稿

时间:2020-03-04 10:20:34

标签: angular typescript leaflet

我有一个计算两点之间路线的函数。

import numpy as np
df['Condition'] = np.where((df['Date of entry to current post']>df['Date of entry to current payband']) & (df['Status'] =='NEW ENTRANT*'), 1, 0)
df = df.loc[df['Condition'] == 1)

但是我面临的问题是 myRoute.route()函数在 ClosestPoint()执行之后执行,因此我无法正确获取距离。我希望 myRoute.route()在for循环内执行,然后开始下一次迭代。

有可能吗?如果是,那怎么办?还是有其他解决方案?

2 个答案:

答案 0 :(得分:1)

尝试将此函数包装在 Promise 对象

  function get_routes(rWP1,rWP2) {
    return new Promise((resolve, reject) => {
      myRoute.route([rWP1, rWP2], function (err, routes) {
        if (err) {
          reject(err);
        } else {
          resolve(routes)
        }
      });
    })
  }

之后,您可以在异步函数中使用 await ,也可以构建承诺对象数组并使用 Promise.all

答案 1 :(得分:0)

我们将清除一件事。 javascript中带有回调的任何函数都不会同步。因此,您需要使用async

async.eachSeries(waypoint, function(item, nextitem) {
    async.waterfall([
         function(callback) {
             var rWP1 = new L.Routing.Waypoint;
             rWP1.latLng = currentLocation;    
             var rWP2 = new L.Routing.Waypoint;
             rWP2.latLng = item;
             callback(null, [rWP1, rWP2]);
         },
         function(data, callback) {
             myRoute.route([rWP1, rWP2], function(err, routes) {
                  var distance = routes[0].summary.totalDistance;
                  distances.push(distance);
                  if(distances.length === waypoint.length){
                      var minDistance=Math.min.apply(Math, distances)
                      console.log("distances "+distances);
                  } else {
                      callback(null, 3); //3 is just a random value you can give
                  } 
             });
         }
    ],nextitem)         
});