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 */ });