[].map の後に try/catch ブロックを内部で参照すると、遅延が発生することに気付きました。そのような動作を回避する理由と方法を知りたいですか?
私のテストケースは:
-file_picked は type=file の入力の変更イベントのハンドラです
file_picked: function(e){
var flist = e.target.files, //all picked files
parsed = [], //all ok read
errors = []; //all errored
//parse files
_.map(flist, function(file){
var reader = new FileReader();
//set callbacks
reader.onload = function(e){ //@reading done
try{
var file_cont = e.target.result,
parser = new(less.Parser)({
filename: file.name
});
//run file through the less parser
parser.parse(file_cont, function (err, tree) { //parser done
var o = {};
if (err) { //@some parser error occured
err('less parser error',err);
o[file.name] = err;
errors.push(o);
}else{ //@parsed successfully by the less parser
o[file.name] = tree.toCSS();
parsed.push(o);
}
});
}catch(e){
err('reader onload exception',arguments);
var o = {}; o[file.name] = i18n('Parsing failed');
errors.push(o);
}
};
reader.onerror = function(e){ //@reading error
err('reader onerror',arguments);
var o = {}; o[file.name] = i18n('Reading failed with error: ')+e.target.error.code;
errors.push(o);
};
//start reading
reader.readAsText( file );
});
//reading completed
console.log(parsed)
for( var i = 0; i < parsed.length; i++ ) {
console.log(parsed[i],errors);
}
}
コンソールに解析済みの配列が表示されます。しかし、それは決して繰り返されません。なぜですか?
前もって感謝します
PS.:_.map は underscore.js メソッド、err,lg は console.xxx ラッパーです。