簡體   English   中英

角$ q嵌套承諾

[英]Angular $q nested promise

我有一個需要返回收藏位置列表的函數。 像這樣

LocationsFactory.getFavoriteLocations()。then(function($ favoriteLocations){});

getFavoriteLocations看起來像這樣

getFavoriteLocations: function() {
                if (favorite_locations.length == 0)
                {
                    var deff = $q.defer();
                    obj.getDeviceId().then(function(device_id) {
                    $http.get('url?token=' + device_id).then(function(response) {
                                 favorite_locations = response.data;
                                 deff.resolve(favorite_locations);
                                 return deff.promise;
                               })
                    })
                } else {
                    return favorite_locations;
                }
            }

再次使用getDeviceId,這是一個基於promise的函數。

getDeviceId: function() {
  var deff = $q.defer();
  deff.resolve(Keychain.getKey());
  return deff.promise;
}

我得到的錯誤是TypeError:無法讀取未定義的屬性'then'。 請幫忙!

$q在這里沒有必要:

if (favorite_locations.length == 0)
{
    return obj.getDeviceId() // you have to return a promise here
        .then(function(device_id) { 
            return $http.get('url?token=' + device_id) // you will access the response below
        })
        .then(function(response) {
            favorite_locations = response.data;
            return favorite_locations
        });
    })
}

現在應該可以了。

您可以連鎖承諾:

        getFavoriteLocations: function () {
            if (favorite_locations.length === 0) {
                return obj.getDeviceId().then(function (device_id) {
                    return $http.get('url?token=' + device_id).then(function (response) {
                         favorite_locations = response.data;
                         return favorite_locations;
                    });
                });
            }

            return $q.resolve(favorite_locations);
        }

並改善此:

getDeviceId: function() {
    return $q.resolve(Keychain.getKey());
}

暫無
暫無

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

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