Wie

2016-03-21 16 views
0
Versprechen Funktion Ablaufsteuerung Schleife

Ich bin neu Versprechen und Q zu verwenden, ich bin sicher, ich tue nicht richtig,
bitte einen Vorschlag machen mir,Wie

kann ich fcall innerhalb fcall? Weil es eine For-Schleife gibt Ich möchte sicherstellen, dass jedes Element image[i] eine Liste versprechungen Funktion Fluss verarbeiten.

Ich brauche die response von Anfang bis Ende, Eingabe zu jeder Versprechen-Funktion, dann weiter zum nächsten Fluss das Ende zurück zum Client Seite
aber ich habe nicht, wie mit der Schleife beschäftigen

var response = {}; 

Q.fcall(function() { 
    // validate request ... 
    return response; 
}) 
.then(function(response) { 
    // save file 
    for (var i = 0; i < images.length; i++) { 
    Q.fcall(function() { 
     // do something with images[i] 
     return response; 
    }) 
    .then(function(response) { 
     // do something with images[i] 
     return response; 
    }) 
    .fail(function(error, response) { 
     response.error = error; 
     res.send(response); 
    }) 
    .done(function(response) { 
     return response; 
    }) 
    } 

    return response; << I want this response append data from above loop if above loop all success, then to next flow save db query, if one fail then res.send(), not execute all after 
}) 
.then(function(response) { 
    // save db query ... 
    return response 
}) 
.fail(function(error, response) { 
    response.error = error; 
    res.send(response); 
}).done(function(response) { 
    res.send(response); 
}); 
+0

im Moment Antwort von '.done' in Die Bildverarbeitungskette ist nirgends verloren. Lesen Sie über 'Q.All'. Machen Sie ein Array von Versprechen (Ketten, die Sie in 'für' Schleife erstellen) und verwenden Sie' Q.All' –

+0

danke für die Antwort, in der Bildprozesskette müssen sie eine getan, dann zur nächsten, wenn q.all in der Lage, das gleiche zu tun Ding? – user1575921

+0

Müssen Sie ein Bild genau nach dem anderen bearbeiten? oder machen Sie einfach zwei verschiedene Dinge auf jedem Bild? –

Antwort

1

Da Bilder aus der Antwort verarbeitet werden können, gleichzeitig können Sie Q.All verwenden, um sicherzustellen, dass alle Bilder erfolgreich

verarbeitet werden 210

Jetzt müssen Sie nur noch die Funktionen korrekt implementieren und sicherstellen, dass der Datenfluss korrekt ist.

Stellen Sie sicher, dass Sie von handleImageError eine Zurückweisung (return Q.reject();) zurückgeben. Da Fehler Fehler absorbieren können, wenn nichts zurückgegeben wird. Eigentlich von Ihrem Code denke ich, dass Sie diesen Handler nicht benötigen (jeden Bildfehler verarbeiten), weil es einen Handler gibt, der mit einem Fehler reagiert, wenn eines der Bilder

+0

ja es funktioniert !! Danke für die Beschreibung! – user1575921