嵌套的async.eachOfSeries TypeError:innerCallback不是函数

时间:2016-10-28 18:20:38

标签: node.js

我对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);
});

1 个答案:

答案 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;
&#13;
&#13;

或者您可以继续使用eachSeries但是当documentation声明参数是

时似乎有点错误
eachSeries(coll, iteratee, callback)

它似乎实际上是

eachSeries(coll, callback)

使您的代码看起来像

&#13;
&#13;
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;
&#13;
&#13;