在 Angular 应用程序上收到错误:类型错误:无法读取未定义的属性“then”

Getting error on Angular app: TypeError: Cannot read property 'then' of undefined

本文关键字:错误 未定义 读取 属性 then 类型 应用程序 应用 Angular 程序上      更新时间:2023-09-26
当我

从控制器发布时出现错误

  function postDashboardsData (dataType, dateFrom, dateTo) {
    $scope[dataType + '_done'] = false;
    Api.post('rotations/' + vm.data[0]._id + '/dashboard', angular.extend({
        type : dataType,
        date_range : {
          from : dateFrom,
          to : dateTo
        }
      }, vm.data));
  }

在这里,我在同一控制器中调用该函数

  postDashboardsData('overall', $scope.datepickerConf1.overall, $scope.datepickerConf2.overall)
    .then(function(data) {
      console.log('data>>>', data);
      $scope.overallData = data;
    })

那么上面是返回未定义的那个

再次出错

类型错误:无法读取未定义的属性"then"

我该怎么办?

你忘记了 postDashboardsData 中的return

function postDashboardsData (dataType, dateFrom, dateTo) {
    $scope[dataType + '_done'] = false;
    var dashboardsDataPromise = Api.post('rotations/' + vm.data[0]._id + '/dashboard', angular.extend({
        type : dataType,
        date_range : {
          from : dateFrom,
          to : dateTo
        }
    }, vm.data));
    return dashboardsDataPromise;
}

解释

Api.post() 函数返回一个 promise,该 promise 是一个带有then函数的对象。您的 postDashboardsData 函数应返回此承诺,因此必须在执行 Api.post 之前放置 return。

您在postDashboardsData中缺少一个return,即:

function postDashboardsData(dataType, dateFrom, dateTo) {
    $scope[dataType + '_done'] = false;
    return Api.post('rotations/' + vm.data[0]._id + '/dashboard', angular.extend({
        type: dataType,
        date_range: {
            from: dateFrom,
            to: dateTo
        }
    }, vm.data));
}

然后你可以像这样使用postDashboardsData

postDashboardsData(dataType, dateFrom, dateTo).then(function(response){
     console.log(response, response.data);
})