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;
});
}
}
}
当查询任何一个返回函数时,它返回一个包含promise函数的对象(finally
,catch
和then
),而不是解析后的值。我该如何解决这个问题?
答案 0 :(得分:4)
你没有。您所做的是将您自己的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) {
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 */ });
因为,正如评论所指出的那样,事实之后你不能让promises同步。