最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

当我在使用javascript的地图内部时,承诺不能正常工作

IT培训 admin 12浏览 0评论

当我在使用javascript的地图内部时,承诺不能正常工作

我正在编写JavaScript函数来处理map方法中的api调用,在map方法中完成所有任务之前我的函数执行错误的结果。但它不符合我的期望。

我的代码:

function vehicleAndWorker(hook){
  var routeArray = [];
  return new Promise(function(resolve, reject) {
    hook.data.map(d => {
      var routeArray = [];
      delete d.driverId
      delete d.vehicle
      delete d.workers
      return hook.app.service('vehicles')
        .find({ query: {vehicleId: d.vehicleId}})
        .then(result=>{
          var vehicleTypeId = result.data[0].vehicleTypeId;
          return hook.app.service('vehicle-types')
              .find({ query: {vehicleTypeId: vehicleTypeId }})
              .then(result=>{
                  d.vehicle = {
                    vehicleId: d.vehicleId,
                    vehicleTypeId: vehicleTypeId,
                    fixedCost: result.data[0].fixedCost,
                    variableCost: result.data[0].variableCost
                  }
                  return hook.app.service('workers')
                    .find({ query: {assignedVehicleId: d.vehicleId}})
                    .then(result=>{
                        d.workers = [{
                          id:result.data[0].workerId,
                          name:result.data[0].name,
                          type:result.data[0].type
                        }];
                        delete d.vehicleId;
                  })
              })
          })
      })
      resolve(hook)
  })
}

在执行我的地图作业之前,返回执行如何解决此问题。

回答如下:

首先链接你的承诺,而不是嵌套它们。如果你使用嵌套,那么你不需要承诺。

第二次使用承诺所有

function vehicleAndWorker(hook){
    var all = [];
    var i =0;
    hook.data.map(d => {
      delete d.driverId
      delete d.vehicle
      delete d.workers
      all[i] = hook.app.service('vehicles')
        .find({ query: {vehicleId: d.vehicleId}})
        .then(result=>{
              var vehicleTypeId = result.data[0].vehicleTypeId;
              return hook.app.service('vehicle-types').find({ query: {vehicleTypeId: vehicleTypeId }})
         })
        .then(result=>{
            d.vehicle = {
              vehicleId: d.vehicleId,
              vehicleTypeId: vehicleTypeId,
              fixedCost: result.data[0].fixedCost,
              variableCost: result.data[0].variableCost
            }
            return hook.app.service('workers').find({ query: {assignedVehicleId: d.vehicleId}})
         })
        .then(result=>{
            d.workers = [{
              id:result.data[0].workerId,
              name:result.data[0].name,
              type:result.data[0].type
            }];
            delete d.vehicleId;
            return result
         })
          i++;
      })
     return Promise.all(all).then(hook);     
}

当我在使用javascript的地图内部时,承诺不能正常工作

我正在编写JavaScript函数来处理map方法中的api调用,在map方法中完成所有任务之前我的函数执行错误的结果。但它不符合我的期望。

我的代码:

function vehicleAndWorker(hook){
  var routeArray = [];
  return new Promise(function(resolve, reject) {
    hook.data.map(d => {
      var routeArray = [];
      delete d.driverId
      delete d.vehicle
      delete d.workers
      return hook.app.service('vehicles')
        .find({ query: {vehicleId: d.vehicleId}})
        .then(result=>{
          var vehicleTypeId = result.data[0].vehicleTypeId;
          return hook.app.service('vehicle-types')
              .find({ query: {vehicleTypeId: vehicleTypeId }})
              .then(result=>{
                  d.vehicle = {
                    vehicleId: d.vehicleId,
                    vehicleTypeId: vehicleTypeId,
                    fixedCost: result.data[0].fixedCost,
                    variableCost: result.data[0].variableCost
                  }
                  return hook.app.service('workers')
                    .find({ query: {assignedVehicleId: d.vehicleId}})
                    .then(result=>{
                        d.workers = [{
                          id:result.data[0].workerId,
                          name:result.data[0].name,
                          type:result.data[0].type
                        }];
                        delete d.vehicleId;
                  })
              })
          })
      })
      resolve(hook)
  })
}

在执行我的地图作业之前,返回执行如何解决此问题。

回答如下:

首先链接你的承诺,而不是嵌套它们。如果你使用嵌套,那么你不需要承诺。

第二次使用承诺所有

function vehicleAndWorker(hook){
    var all = [];
    var i =0;
    hook.data.map(d => {
      delete d.driverId
      delete d.vehicle
      delete d.workers
      all[i] = hook.app.service('vehicles')
        .find({ query: {vehicleId: d.vehicleId}})
        .then(result=>{
              var vehicleTypeId = result.data[0].vehicleTypeId;
              return hook.app.service('vehicle-types').find({ query: {vehicleTypeId: vehicleTypeId }})
         })
        .then(result=>{
            d.vehicle = {
              vehicleId: d.vehicleId,
              vehicleTypeId: vehicleTypeId,
              fixedCost: result.data[0].fixedCost,
              variableCost: result.data[0].variableCost
            }
            return hook.app.service('workers').find({ query: {assignedVehicleId: d.vehicleId}})
         })
        .then(result=>{
            d.workers = [{
              id:result.data[0].workerId,
              name:result.data[0].name,
              type:result.data[0].type
            }];
            delete d.vehicleId;
            return result
         })
          i++;
      })
     return Promise.all(all).then(hook);     
}
发布评论

评论列表 (0)

  1. 暂无评论