Javascript AngularJS承诺返回对象而不是解析值
查询任一返回函数时,它返回一个包含承诺函数的对象(Javascript AngularJS承诺返回对象而不是解析值,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,查询任一返回函数时,它返回一个包含承诺函数的对象(最终、捕获和然后),而不是解析值。如何修复此问题?您不需要。您要做的是将自己的API公开为基于承诺的: function times() { var deferred = $q.defer(); var data = $http.get('https://bus.data.je/latest'); data.success(function(_data) { deferred.resolve(_data); });
最终
、捕获
和然后
),而不是解析值。如何修复此问题?您不需要。您要做的是将自己的API公开为基于承诺的:
function times() {
var deferred = $q.defer();
var data = $http.get('https://bus.data.je/latest');
data.success(function(_data) {
deferred.resolve(_data);
});
data.error(function(error) {
deferred.reject(error);
});
return {
all: function() {
return deferred.promise;
},
timetable: function(type) {
_data = deferred.promise;
return _data.filter(function (el) {
el = el[0];
return el.MonitoredVehicleJourney.DirectionRef == type;
});
}
}
}
然后像这样使用它:
function times() {
var deferred = $q.defer();
var data = $http.get('https://bus.data.je/latest');
data.success(function(_data) {
deferred.resolve(_data);
});
data.error(function(error) {
deferred.reject(error);
});
return {
all: function() {
return deferred.promise;
},
timetable: function(type) {
return deferred.promise.then(function (data) {
return data.filter(function (el) {
el = el[0];
return el.MonitoredVehicleJourney.DirectionRef == type;
});
});
}
}
}
因为,正如评论所指出的,你不能在事后同步做出承诺。提示:所有对
的引用都被延迟。承诺可以被数据替换。你不能同步获得承诺的解析值。承诺仍然是异步的,您所能做的就是从中派生出另一个承诺。
times.timetable().then(function (timetables) { /* work with the timetables here */ });