2016-05-15 70 views
0

這是我試圖包裹頭部的程序,一旦所有結果都被推送,我如何正確打印q項目?如何在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規範還有一個很好的'Promise.all',它將等待所有的承諾完成。由於A + Promise Libraries相互兼容,因此可以使用。 –

回答

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); 
} 
相關問題