2016-10-21 152 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

从角文档https://docs.angularjs.org/api/ng/service/ $ Q

调用一个承诺的then方法返回一个新衍生承诺,

这是写角的方式。因此,你必须像这样访问它。

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

我明白了,谢谢。我忘记了这个异乎寻常的事实。 –

1

您可以通过执行以下操作访问值:

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

我知道我可以那样做,但我想明白我不能这样做。 –

+0

'then()'函数返回一个promise。这是他们的工作方式。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then –

+0

如果您不希望它返回承诺,那么您可以运行同步运行命令并阻止线程或将回调函数传递给get方法并调用该方法,而不是使用匿名函数。承诺的要点是不要做那些事情 – charliebeckwith