Sie auch in einer Funktion zu tun, die es selbst nennt:
function ramdomMerch (index, maxIndex) {
count = index;
count++;
if (count > maxIndex) {
exit(); //This will end the loop as soon as it hits the maxIndex
}
// random select merchant
let randomMerchantName = new Promise((resolve, reject) => {
merchantName = branchlist[branchIndex].merchantName;
resolve(merchantName);
});
let promiseMerchantKey = new Promise((resolve, reject) => {
randomMerchantName.then((merchantName) => {
firebase.database().ref('merchants').orderByChild('merchantName').equalTo(merchantName).once('value', function(snapshot) {
var merchantData = snapshot.val();
if (merchantData){
console.log('merchant exists');
snapshot.forEach(function(childSnapshot) {
var item = childSnapshot.val();
item.key = childSnapshot.key;
resolve(item.key);
});
}else{
var merchantKey = firebase.database().ref('merchants').push({
merchantName : merchantName
}).getKey();
resolve(merchantKey);
}
ramdomMerch(count, maxIndex); // Here we simply call after finish the next "loop"
});
});
});
}
randomMerch(1, 10); //We start it like an loop with the start and endIndex
Eine bessere Möglichkeit, mit dem Versprechen zu arbeiten, ist die then Betreiber. Es wäre eine Syntax wie:
let promiseMerchantKey = new Promise((...
promiseMerchantKey.then(function(value) {
// Sucess, call next promise or next loop if it was the last
}, function(reason) {
// error
});
ich ein 'resolve' innen' snapshot.forEach' sehen ... was bedeutet, denken Sie, ein Versprechen mehr als einmal –
lösen können Sie ein Flag setzen kann, wenn alle überprüfen Versprechen gemacht und überprüfen Sie diese Flagge jedes Mal, wenn ein Versprechen gemacht wird. – huydq5000
@JaromandaX Sorry, aber was meinst du? Ist es falsch? – guest176969