2016-03-30 100 views
0

今天我正在進行一些服務電話,實際上有兩個電話。 但我無法得到這個服務內的工作。我的代碼需要二是這樣的:有依賴電話的角度服務

angular.module('module') 
.service('NotificationManager', function (TransactionService) { 
// call get currentransactionid from TransactionService 
TransactionService.GetPendingTransactionForUser().then(function(result){ 
// call isNewTransaction which needs the result from GetPendingTransactionForUser passed as a parameter 
TransactionService.IsNewTransaction(result.id).then(function(result){ 
return result.IsNewTransaction 
} 
} 

,然後在控制,我想回到這個功能(IsNewTransaction)的結果。我怎樣才能正確實現這一點?目前它在我在控制器中單獨進行服務調用時起作用,但這不是所期望的,因爲此代碼需要從許多控制器調用。任何幫助,將不勝感激。

回答

1

添加兩個return語句,而服務將返回IsNewTransaction解決的承諾:

angular.module('module').service('NotificationManager', function (TransactionService) { 
    return TransactionService.GetPendingTransactionForUser().then(function(result) { 
     return TransactionService.IsNewTransaction(result.id).then(function(result) { 
      return result.IsNewTransaction; 
     }); 
    }); 
}); 

或者,而不是級聯這樣的呼籲:

angular.module('module').service('NotificationManager', function (TransactionService) { 
    return TransactionService.GetPendingTransactionForUser().then(function(result) { 
     return TransactionService.IsNewTransaction(result.id); 
    }).then(function(result) { 
     return result.IsNewTransaction; 
    }); 
}); 
+0

爲了讓事情變得更加困難:我需要在控制器中調用這個調用的結果,並且當控制器中有這個調用結果時,請使用它。所以事情是我需要做兩個調用,當(只有當我得到結果)做某事的時候做一些事情。但是如果我做雙重返回語句,這應該是可能的嗎? –

+0

此服務返回承諾。所以你只需要調用then()就可以了,就像所有其他的promise一樣。承諾很難把握。我寫了一篇文章,證明很多人對他們有用:http://blog.ninja-squad.com/2015/05/28/angularjs-promises/ –

+0

好的謝謝!我明天會試試! –