我完全理解類似的問題之前已被問過,但我沒有得到它的運行。我需要一系列的承諾,我需要等到所有的承諾都解決了。
我的問題是,我需要的基礎上promise2我promise4是無論是$ translate.use結果調用基於另一個承諾的結果,不同的承諾:-(
所以OR是$ translate.refresh
這是我迄今爲止(簡體):
var promise1 = someService.get({}).$promise.then(function (result) {
// do stuff
});
var promise2 = anotherService.getPromise().then(function (result) {
var properties = result[0];
// do stuff
return properties;
});
var promise3 = promise2.then(function(properties){
// using $translate (angular-translate) here which is async as well
var userLanguage = properties.language;
if (userLanguage !== $translate.preferredLanguage()) {
// either this is the 4th promise
$translate.use(userLanguage).then(function (myVar) {
// ...
});
} else {
// or this is the 4th promise
$translate.refresh().then(function (myVar) {
// ...
});
}
});
var loadPromises = {
promise1: promise1
promise2: promise2
promise3: promise3
promise4: ???
};
$q.all(loadPromises).then(function (result) {
// anything done
});
這和OP中的邏輯不太一樣。的確,'promise3'被打破,'return'語句丟失,但'promise2'很好,可以保持原樣。這就可以獲得對「全部」承諾的承諾結果,如OP所示。 – Amit
@Amit這是真的,我的代碼將不會在$ q.all塊中提供promise2結果,但是我的理解是OP不需要它,否則他們可能(?)不會將promise3鏈接到它。但是當然你是正確的,如果需要的話,它仍然很容易調整。 – dfsq
如果這是需要,爲什麼最後一個'then'處理程序呢?代碼只是從前一個函數繼續到後一個,沒有return語句和額外的promise鏈。 – Amit