I have an AngularJS application, which I use promises to get data from firebase database.
Here is my home-controller
:
$scope.wallets;
walletDAO.getWalletsByUserId(auth.uid)
.then(function(wallets){
$scope.wallets = wallets;
$scope.$apply();
})
.catch(function(error){
console.log(error);
});
These are my two methods inside an service I call walletDAO
:
this.getWalletsByUserId = function(id) {
return new Promise(function(resolve, reject) {
//codigo aqui
var dbRef = database.ref("users/" + auth.currentUser.uid);
dbRef.on('value', function(data) {
//console.log("Wallet IDs Retrieved!");
var userOnDB = data.val();
var walletIds = userOnDB.wallets;
var wallets = [];
for (i = 0; i < walletIds.length; i++) {
var x = getWalletById(walletIds[i])
.then(function(wallet){
wallets.push(wallet);
})
.catch(function(error){
console.log(error);
});
}
resolve(wallets);
}, function(error) {
reject(error);
});
});
};
var getWalletById = function(id) {
return new Promise(function(resolve, reject) {
var dbRef = database.ref("wallets/" + id);
dbRef.on('value', function(data) {
//console.log("Wallet Retrieved!");
var wallet = data.val();
//console.log(wallet);
resolve(wallet);
}, function(error) {
reject(error);
});
});
};
The second method, getWalletById
, receive an wallet ID
and return an wallet
object from the firebase database. this mehod is called on the first method, getWalletsByUserId
inside a for
loop, which should wait for the second method to return the wallet before iterate to the next, so it can push it into the array. The problem is that it dont wait and the code execute the .then()
method on the home-controller
before the resolving of the getWalletById
, leaving the $scope.wallets
empty.
Any advice?
Source: AngularJS
from Angular Questions https://angularquestions.com/2017/10/02/how-to-make-javascript-promise-wait-for-another-promise-to-be-resolved-inside-for-loop/
via @lzomedia #developer #freelance #web #lzomedia.com
No comments:
Post a Comment