我正在使用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'
}
}
});
}]);