2016-05-15 18 views
0

ここでは、私の周りを包み込んでいるプログラムがあります。どのように結果がプッシュされるのですか?qの項目を非同期で印刷する方法

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

で見てください。すべての非同期操作が完了した後にのみ印刷したい場合は、実行する操作の数を把握し、完了した数を保持する必要があります。これらの数字が一致すると、すべての非同期操作が完了したことがわかります – Literphor

+0

@Literphorプロミスの仕様には、すべての約束が終わるまで待つ素敵な 'Promise.all'もあります。 A + Promiseライブラリは相互に互換性があるので、それを使用することができます。 –

答えて

0

あなたは、個々のプッシュは、個々の非同期操作であり、それは完全なとき、それぞれの動作を印刷する場所にそれを正しくやっている私のバージョン

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); 
} 
関連する問題