angularjs: цепочка обещаний возвращает обещание вместо объекта

У меня есть цепочка обещаний, и я хочу вернуть объект вместо обещания. Вместо этого я получаю обещание. Это функция:

self.get = function(id) {
    var parameters = [id];
    var orders     = {}
    return DBA.queryAgent("SELECT * FROM Orders WHERE " + column_id + " = ?", parameters).then(function(result) {
        return DBA.getById(result);
    }).then(function(result) {
        order = result;
        return self.getProdutcs(id);
    }).then(function(result) {
        order.Products = result;
        return order;
    });
}

я ожидаю, что

service.get(1)

возвращает объект, я получаю обещание. Где я не прав?

Спасибо


person Giacomo M    schedule 21.10.2016    source источник


Ответы (2)



Вы можете получить доступ к значению, выполнив следующие действия:

  service.get.then(function(result) {
    console.log(result);   
  });
person Dave Cooper    schedule 21.10.2016
comment
Я знаю, что могу это сделать, но я хочу понять, почему я НЕ могу этого сделать. - person Giacomo M; 21.10.2016
comment
Функция then() возвращает обещание. Вот как они работают. developer.mozilla.org/en-US/ документы/Интернет/JavaScript/Справочник/ - person Dave Cooper; 21.10.2016
comment
Если вы не хотите, чтобы он возвращал обещание, вы можете выполнить синхронную команду и заблокировать поток или передать функцию обратного вызова методу get и вызвать ее вместо использования анонимной функции. Суть обещаний в том, чтобы не делать ни того, ни другого - person charliebeckwith; 21.10.2016
comment
Благодаря обоим, вы правы. Я забыл об асинхронном факте - person Giacomo M; 21.10.2016
comment
Не знаю, почему мой ответ не был отмечен как выбранный ответ или получил одобрение :( Он содержал всю необходимую информацию. - person Dave Cooper; 21.10.2016
comment
Потому что я задал другой вопрос. Если вы не добавите оператор, вызывающий метод then обещания, вернет новое производное обещание (например, ответ, за который проголосовали), ваш ответ не отвечает на мой вопрос. - person Giacomo M; 21.10.2016
comment
Я буквально сказал это в комментариях :) Затем я связал вас с документацией, которая объясняет это еще больше. Ну что ж. - person Dave Cooper; 21.10.2016