У меня есть следующий метод службы:AngularJS прохождение более чем одно значение обещают успех обратного вызова
ResourcesService.prototype.list = function()
{
var deferred = q.defer();
var settings = fetchSettings();
restService.getAll(resourceName, settings)
.then(function (response) {
deferred.resolve(response.data, {
count: response.headers('cr_count'),
total: response.headers('cr_total'),
last: response.headers('cr_last')
});
}, function (error) {
deferred.reject(error.statusText);
});
return deferred.promise;
}
Как вы можете видеть, я передаю два значения deferred.resolve
, которые response.data
и объекта метаданных.
Up в стеке вызовов у меня есть:
//"scenes" is an object that inherits from ResourcesService
scenes
.withLanguage('en-us')
.sort('creation')
.size(2)
.list()
.then(function (firstPage, metadata) {
//firstPage is the "response.data" from previous method
//metadata is undefined, but should be an object with all the values from the headers
});
Почему metadata
не определено? Я отлаживал ResourcesService
, и заголовки читаются просто отлично, но переданный объект как аргумент deferred.resolve
не передается моей функции обратного вызова.
Поддерживает ли deferred.resolve
только один аргумент для обратного вызова? Должен ли я помещать эти метаданные в один и тот же объект вместе с ответом?
Избегайте [отложенные антипаттерны] (http://stackoverflow.com/q/23803743/1048572). – Bergi
См. Также [javascript, не передающий все аргументы (используя 'Q')] (http://stackoverflow.com/q/17970420/1048572) (' $ q' работает одинаково в этом отношении) – Bergi