2016-05-15 1 views
0

Hier ist ein Programm, ich versuche, meinen Kopf mit, wie drucke ich die Elemente in der q ordnungsgemäß, sobald alle Ergebnisse geschoben werden?So drucken Sie die Elemente in q, die asynchrone Art und Weise

function asyncAdd(a,b,callback) { 
    setTimeout(function() { 
     return callback(a+b); 
    },0); 
} 

var q = []; 
var ctr = 0; 
for (var i=0; i<9; i++) { 
    (function(i) { 
     var res = asyncAdd(i, 0, printRes); 
     q.push(res); 
    })(i); 
} 


function done(q) { 
    console.log("done"+q); 
} 

function printRes(res) { 
    return res; 
} 
+0

Sie es richtig zu tun, wo jeder einzelne Push ist eine individuelle Asynchron-Betrieb und jeder Vorgang wird gedruckt, wenn es fertig ist. Wenn Sie möchten, dass erst nach Abschluss aller asynchronen Vorgänge gedruckt wird, müssen Sie wissen, wie viele Vorgänge ausgeführt werden, und dann zählen, wie viele abgeschlossen sind. Wenn diese Zahlen übereinstimmen, wissen Sie, dass alle asynchronen Vorgänge abgeschlossen sind. – Literphor

+0

@Literphor Die Promise-Spezifikation hat auch eine schöne "Promise.all", die warten wird, bis alle Versprechen gemacht sind. Da A + Promise Libraries miteinander kompatibel sind, könnte dies verwendet werden. –

Antwort

0

haben Sie einen Blick auf meine Version

function asyncAdd(a,b,callback) { 
    callback(a+b); 
} 

var q = []; 
var ctr = 0; 
var max = 9; 
for (var i = 0; i < max; i++) { 
    asyncAdd(i, 0, printRes);  
} 


function done(q) { 
    console.log("done " + q); 
} 

function printRes(res) { 
    q.push(res); 
    if (q.length === max) 
     done(q); 
} 
Verwandte Themen