我对javascript很新,并且有一堆同步代码,我试图变成异步。我有一个库,有很多数据密集的循环。到目前为止,我已经能够使用异步库轻松转换非嵌套循环,但我遇到了嵌套循环的问题。
运行下面的代码时,我得到TypeError: innerCallback is not a function
非常感谢任何帮助。希望我能忽略一些小事。
var async = require("async");
var byteArray = [
[1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 0]
];
async.eachOfSeries(byteArray, function(bytes, x_index, outerCallback) {
console.log(bytes);
async.eachSeries(bytes, function(bits, y_index, innerCallback) {
console.log(bits);
innerCallback();
});
outerCallback();
}, function(err) {
if (err) console.error(err.message);
});
答案 0 :(得分:1)
您可以在内部和外部迭代中使用eachOfSeries
var byteArray = [
[1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 0]
];
async.eachOfSeries(byteArray, function(bytes, x_index, outerCallback) {
async.eachOfSeries(bytes, function(bits, y_index, innerCallback) {
console.log(bits);
innerCallback();
});
console.log('\n\n')
outerCallback();
}, function(err) {
if (err) console.error(err.message);
console.log('done')
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/async/2.1.2/async.js"></script>
&#13;
或者您可以继续使用eachSeries
但是当documentation声明参数是
eachSeries(coll, iteratee, callback)
它似乎实际上是
eachSeries(coll, callback)
使您的代码看起来像
var byteArray = [
[1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 0]
];
async.eachOfSeries(byteArray, function(bytes, x_index, outerCallback) {
async.eachSeries(bytes, function(bits, innerCallback) {
console.log(bits);
innerCallback();
});
console.log('\n\n')
outerCallback();
}, function(err) {
if (err) console.error(err.message);
console.log('done')
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/async/2.1.2/async.js"></script>
&#13;