AngularJS承诺返回对象而不是已解析的值

时间:2014-09-27 18:44:26

标签: javascript angularjs angular-promise

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函数的对象(finallycatchthen),而不是解析后的值。我该如何解决这个问题?

1 个答案:

答案 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同步。