2017-03-15 1 views
-2

Mit dem folgenden Code kann ich sicher sein, dass der letzte Callback die aktualisierten Variablen zurückgibt? Verschachtelte Async-Funktionen

var a = 0; 
async.forEach(collectionarray, function(item, cb1) { 
    async.forEach(collection.anotherarray, function(item, cb2) { 
     a += item.number; 
     cb2(); 
    }, function(err) { 
     if(err) console.log(err); 
    }) 
    cb1(); 
}, function(err) { 
    if(err) console.log(err); 
    console.log(a); // will this be updated for all the collection.anotherarray.number ? 
}) 
+1

Sie sollen 'cb1' in den inneren' forEach' als Callback übergeben, nicht sofort aufrufen! – Bergi

+0

@Bergi du meinst es im letzten Callback auf dem inneren Async nennen? –

Antwort

0

Der dritte Parameter von .forEach dient einem doppelten Zweck: als Rückruf, wenn alle Iterationen fertig sind, oder einen Fehler zu melden. Rufen Sie cb1() innerhalb dieser Rückruf auf der inneren .forEach:

var a = 0; 
async.forEach(collectionarray, function(item, cb1) { 
    async.forEach(collection.anotherarray, function(item, cb2) { 
     a += item.number; 
     cb2(); 
    }, function(err) { 
     if(err) console.log(err); 
     cb1(); 
    }); 
}, function(err) { 
    if(err) console.log(err); 
    console.log(a); 
}) 

Der Ansatz, den Sie geschrieben haben, werden fast definitiv nicht korrekt funktionieren. Die äußere .forEach wird davon ausgehen, dass es viel zu früh getan wird.

Verwandte Themen