2016-10-21 5 views
0

У меня есть цепочка обещает, и я хочу вернуть объект вместо обещания. Вместо этого я получаю обещание. Это функция: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) 

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

Спасибо

ответ

2

Из угловых Docs https://docs.angularjs.org/api/ng/service/ $ д

называя then метод обещание возвращает новый ,

Это способ угловой записи. Следовательно, вы должны получить к нему доступ таким образом.

service.get.then(function(result) { 
    // whatever 
    }); 
+0

Я получил его, спасибо. Я забыл асинхронный факт. –

1

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

service.get.then(function(result) { 
    console.log(result); 
    }); 
+0

Я знаю, что могу это сделать, но я хочу понять, как я не могу этого сделать. –

+0

Функция 'then()' возвращает обещание. Это то, как они работают. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then –

+0

Если вы не хотите, чтобы он возвращал обещание, вы можете запускать команду синхронно и блокировать нить или передать функцию обратного вызова методу get и вызывать это вместо использования анонимной функции. Суть обещает не делать ничего из этого: – charliebeckwith