2015-09-03 89 views
3

我已經使用$q服務與Angular建立了承諾。Angular promise'all` method returns`undefined`

var get = function() { 
    var defer = $q.defer(); 
    setTimeout(function() { 
     defer.resolve('test'); 
    }, 1000); 
    return defer.promise; 
} 

當我調用此函數,它返回像這樣的預期數據:

var promise1 = api.get().then(function(data){ 
    console.log(data); //logs test 
}); 

var promise2 = api.get().then(function(data){ 
    console.log(data); //logs test 
}); 

但是,當我使用all方法,我得到含有undefined兩次的數組。

$q.all([promise1, promise2]).then(function(data){ 
    console.log(data); //logs [undefined, undefined]; 
}); 

我在這裏錯過了什麼嗎?

+0

您的日誌記錄處理程序確實返回'undefined'。 – Bergi

+0

'get'函數可以使用'$ timeout',這樣自定義的'$ q'就會被移除.. –

回答

6

你必須從回調返回數據

嘗試這樣

var promise1 = function(){ 
    return api.get().then(function(data){ 
     return data; 
    }); 
} 
+0

幾乎已經有了!所有工作,謝謝:) – wazzaday

+0

歡迎:) –

1

它必須是這樣的:

var promise1 = api.get(); 
var promise2 = api.get(); 

然後,類型promise1和promise2是「承諾」你可以在$ q.all()中使用它們。

$q.all([promise1, promise2]).then(function(data){ 
console.log(data); //logs ['test', 'test']; 

});

相關問題