Synchrone forEach-Schleife (warten, bis es zu Ende)

Habe ich eine Funktion in Node.js das dauert in ein array und durchläuft es, dabei etwas zeitaufwändige Berechnungen, die auf jedes element.

Hier ist ein super-vereinfachten version der Funktion:

var analyze_data = function (data) {
    data.forEach(function (elm) {
        if (elm.myProp == true) {
            return true;
        }
    });
    return false;
}

Im wesentlichen, die Funktion soll true zurückgeben, wenn alle der Elemente " - Eigenschaft myProp ist gleich true. Wenn keines der Elemente, die diese Bedingung erfüllen, sollte die Funktion false zurück.

Jedoch, der code wartet nie für die forEach-Schleife zu beenden. In anderen Worten, wenn das 100-element in das array erfüllt die Bedingung, die Funktion sollte true zurückgeben. Stattdessen springt return false; aus und gibt false zurück, bevor die forEach Schleife hat Zeit fertig zu stellen.

Ist es eine Lösung für dieses?

Bearbeiten

So erkannte ich, dass ich vereinfachte meine Frage - ich bin tatsächlich mit der Node.js Paket es6-Versprechen, und mein code sieht dann immer so aus:

var analyze_data = function (data) {
    return new Promise(function (resolve, reject) {
        data.forEach(function (elm) {
            if (elm.myProp == true) {
                resolve(elm);
            }
        });
        resolve(false);
    });
}

So, in Wirklichkeit, ich habe nicht das Problem der Rückgabe einen Wert im forEach-Funktion eher als die äußere Funktion. Beachten Sie darüber hinaus, wie die Funktion löst, um das element selbst, anstatt true, ansonsten false. Eigentlich möchte ich wieder einige relevanten Daten, wenn das eine der Elemente geht die Bedingung, andernfalls false, um anzugeben, dass Sie alle gescheitert.

Irgendwelche Ideen jetzt? :p vielen Dank Auch für all die Antworten!

wenn Sie wechseln Sie zu Versprechen, die Sie verwenden können Q.all zum Beispiel. github.com/kriskowal/q/wiki/API-Reference#promiseall
Sie einfach nur wieder den wahren Wert in einem falschen Ort, versuchen Sie es mit Array.prototype.some

InformationsquelleAutor apparatix | 2014-10-31

Schreibe einen Kommentar