2017-08-01 2 views
0

Ich schreibe gerade eine Knotenanwendung, die überprüft, ob eine bestimmte Datei an einem bestimmten Ort existiert. Für jeden Auftrag, der dort existiert, wo er sein soll, möchte ich eine Put-Anfrage an meine Woocommerce API stellen, die den Bestellstatus in Verarbeitung ändert.Rückruf wenn Ereignis mehrmals empfangen wird

Ich möchte jetzt nur den Code fortsetzen, sobald alle meine Bestellstatus erfolgreich auf beide Verarbeitung aktualisiert oder fehlgeschlagen ist.

Gibt es eine Möglichkeit, dieses Problem sauber und asynchron zu lösen? Vielen Dank im Voraus

Antwort

1

Sie wollen einige Versprechen erwarten. So zunächst eine globale Variable erstellen:

var promises = []; 

dann im Grunde, wenn wir etw asynchron, wir ein Versprechen an diesen Array hinzufügen, zum Beispiel:

promises.push(new Promise(function(resolve){ 
    client.updateStatus(orderId, data, function (err) { 
     if (err) return console.log(err); 
     resolve(); 
    }) 
})); 

Dann, wenn alle Versprechen hinzugefügt werden, können wir erwarten sie:

Promise.all(promises) 
.then(function(){ 
    console.log("finished"); 
}); 
+0

schön verwenden können, der großen –

+0

@jan Schmutz arbeitet youre willkommen;) –

1

Try hierfür: Verwenden Sie Async Modul

var async = require('async'); 

    async.eachSeries(my_orders, function(order, ordercallback){ 

     async.eachSeries(order.products, function(product, productcallback){ 
      // DO your put logic here 

      client.updateStatus(orderId, data, function (err) { 
       productcallback(); 
       }) 
     }, function(err){ 
     if(!err) ordercallback() 
     }); 

    }); 
+0

warum async zu nutzen, während wir versprechen –

Verwandte Themen