Ionic Angular闭包用于尝试返回json数据

Ionic Angular Closure for trying to return json data

本文关键字:返回 json 数据 Angular 闭包 用于 Ionic      更新时间:2023-09-26

我有一个Ionic应用程序,我正试图从闭包内部返回数据。控制台正确显示了所有内容,但我似乎无法正确返回数据。我尝试了几种不同的变体,但没有成功。

$scope.callbackMethod = function (query) {
 //var ritems= new Array();
  var ritems;
  Inventory.search(query, $scope.currentUser.token, $scope.currentUser.user_id, function(response) {
 //console.log(JSON.stringify(response));
 if(response.success == true)
 {
    $ionicLoading.hide();
    $scope.requestmodal.hide();            
    console.log(response.items);
    ritems= response.items;    
  }
    else
  {
    $ionicLoading.hide();
    //console.log(response.message);
    return $scope.errorMessage = response.message;
   } 
  });
console.log(ritems);
return ritems;
};

还有这个:

 $scope.callbackMethod = function (query) {
 //var ritems= new Array();
  var ritems =  Inventory.search(query, $scope.currentUser.token, $scope.currentUser.user_id, function(response) {
     //console.log(JSON.stringify(response));
     if(response.success == true)
     {
        $ionicLoading.hide();
        $scope.requestmodal.hide();
        console.log(response.items);
        return response.items;
      }
        else
      {
         $ionicLoading.hide();
         //console.log(response.message);
         return $scope.errorMessage = response.message;
       } 
    });
console.log(ritems);
return ritems;
};

返回到脚本的json是:

{"success":true,"items":[{"id":"1","0":"1","name":"Product 1","1":"Product 1","ref_id":"","2":""},{"id":"2","0":"2","name":"Product 2","1":"Product 2","ref_id":"","2":""}],"message":""}

有什么想法吗?非常感谢!!

您可以使用此方法来解决问题

var cbm = function (query) {
  var defer = $q.defer();
  Inventory.search(query, $scope.currentUser.token,$scope.currentUser.user_id, function(response) {
  if(response.success == true)
  {
    $ionicLoading.hide();
    $scope.requestmodal.hide();            
    defer.resolve(response.items) ;   
  }
  else
  {
    $ionicLoading.hide();
    defer.reject(response.message);
  } 
});
 return defer.promise;
};

在呼叫时,您可以调用类似的回调方法

$scope.callbackMethod = function (query){ 
   return cbm(query).then(function(data){ return data;}); 
}