Ich habe folgendes:Javascript forEach - für SetTimeout warten, bevor sie abgeschlossen
https://jsfiddle.net/qofbvuvs/
var allItems = ["1", "2", "3"]
var allPeople = ["A", "B"]
var testFoo = function(itemValue, peopleValue) {
setTimeout(function(){
return itemValue == "3" && peopleValue == "B"
}, 200)
}
allItems.forEach(function(itemValue) {
allPeople.forEach(function(peopleValue) {
// I want to iterate through each object, completing testFoo before moving on to the next object, without recursion. TestFoo has a few instances of setTimeout. I've tried using promises to no avail.
if (testFoo(itemValue, peopleValue)){
alert("success")
} else{
// nothing
};
})
})
alert("complete")
Mein Ziel ist es, durch jedes Element zu durchlaufen, eins nach dem anderen, um, während für die Warte Ergebnisse von testFoo
. Wenn testFoo besteht, sollte ich die Ausführung stoppen.
Ich habe versucht, Versprechen (https://jsfiddle.net/qofbvuvs/2/) zu verwenden, aber kann nicht das Verhalten, das ich suche. Success
sollte vor Complete
aufgerufen werden. TestFoo
hat ein paar setTimeouts, die ich umgehen muss (es ist eine Bibliothek, die ich nicht ändern kann). Wie kann dies erreicht werden?
seit dem Aufruf von testFoo() führt ab sofort (ohne für den Timeout zu warten) wird es keinen Rückgabewert wie Sie haben‘ erwarten. Wenn Sie async verwenden, müssen Sie sich daran gewöhnen, keine Rückgabe zu verwenden und Ergebnisse in Callbacks zu behandeln. – James
@James Ich habe ein Deferred in 'testFoo' eingeführt, um das Ergebnis zu übergeben, aber die Schleifen werden fortgesetzt, ohne auf das Ergebnis zu warten. Irgendwie kann ich zurückgestellte Callbacks nutzen und die Loops warten lassen? – SB2055
@James mein Versuch: https://jsfiddle.net/qofbvuvs/2/ – SB2055