AngularJS中的$ promise.then和defer.promise有什么区别

时间:2015-02-02 21:51:19

标签: javascript angularjs angular-promise

我正在使用AngularJS攻击使用JSONP的API。我正在尝试格式化从我的工厂返回的JSON,但无法使用defer.promise访问它。我能够在浏览器中看到返回的数据,而不是在控制台中。

哪种方式更好? $ promise.then和defer.promise有什么区别?

defer.promise

var defer = $q.defer();
defer.promise.then(function () {
    pet.details = BattlePetsFactory.query({
        SpeciesID: 258
    });

    // Returns e { $promise={...}, $resolved=false, toJSON=function(), more...} in the console
    console.log(pet.details);

    // Returns undefined
    console.log(pet.details.name);
});

defer.resolve();

为什么这不会像Mini promise那样返回Mini Thor?

$ promise.then

var factory = BattlePetsFactory.query({
    SpeciesID: 258
});

factory.$promise.then(function (data) {
    pet.details = data;

    // Returns Mini Thor 
    console.log(pet.details.name);
});

我需要访问代码中的数据的原因是因为我正在修改json结构,所以我可以将值存储在我的数据库中。

这是我的工厂,以防万一需要。

app.factory('BattlePetsFactory', ['$resource', function ($resource) {
    return $resource('https://us.api.battle.net/wow/battlePet/species/:SpeciesID' + queryString, {}, {
        query: {
            method: 'JSONP',
            params: {
                jsonp: 'JSON_CALLBACK'
            }
        }
    });
}]);

0 个答案:

没有答案