簡體   English   中英

如何將promise的屬性修改為等於AngularJS中的對象的屬性?

[英]How can I modify the properties of a promise to be equal to the properties of an object in AngularJS?

基本上,我試圖在一個服務中創建一個泛型函數,該函數接受一個對象的值並檢查是否與另一個對象共享任何參數,如果共享,則將原始對象的參數值替換為新對象中的共享參數。 此函數適用於任何JSON對象,如下所示:

load: function(loadTrue, settings1, settings2) {
  if (loadTrue) {
    for (var prop in settings1) {
      if (settings2.hasOwnProperty(prop)) {
        settings1[prop] = settings2[prop];
      }
    }
    return settings1;
  }
  else{
    return settings1;
  }
},

就像我說的那樣,這對於任何JSON對象都可以很好地工作,但是我現在面臨的問題是當我嘗試將資源與對象進行比較時(由於以下原因,該函數中的第二項始終必須是普通的JSON對象)項目的性質,但我不能總是返回一個對象,有時它是我返回的資源)。

這是我在控制台中登錄它們時正在比較的兩個對象:

圖1

Settings1: Resource {$promise: Object, $resolved: false}
Settings2: Object {class: "messageType", id: 181, message: "Test messageee"…}

但是,當展開時,兩者看起來非常相似:

圖2

Settings1:
$promise: Object
$resolved: true
class: "messageType"
id: 181
message: "Test"
messageName: "testing 1"

Settings2:
class: "messageType"
id: 181
message: "Test messageee"
messageName: "testing 1"

如您所見,我基本上需要將settings1中的message屬性覆蓋為settings2。 問題似乎是(通過調試器時),而不是通過Figure [2],Angualr似乎正在查看Figure [1],並且發現兩個對象之間沒有共享參數,因此沒有任何覆蓋。

為此的方法調用如下所示:

$scope.subject = myService.load($scope.loadIsTrue, $scope.subject, $localStorage.subject2);

主題聲明如下:

$scope.subject = messageService.messageResource.get({messageName: 'test'});

嘗試以下更改:

在您的messageService服務中(您必須更改它以匹配您的方法):

get: function (message) {
            var deferred = $q.defer();

            $http({
                url: '/YourHTTPcall',
                method: "GET",
                dataType: 'json'
            }).success(function (data, status, headers, config) {                    
                deferred.resolve(data);                                                        
            }).error(function (data, status, headers, config) {

            });
            //This line is key
            return deferred.promise;
        }

然后在您的其他代碼中進行調用

messageService.messageResource.get({messageName: 'test'}).then(function(data){
   $scope.subject = data;
}).then(function() {
   myService.load($scope.loadIsTrue, $scope.subject, $localStorage.subject2);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM