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