异步迭代器给出TypeError:undefined不是函数

时间:2014-09-05 07:58:56

标签: javascript node.js async.js

我正在尝试学习如何在node.js中使用async模块,我会遇到以下问题:

我首先编写了这个脚本,它的工作正常(据我所知)

var async = require('async');
var seconds_values = [];

process();

function process() {
    var names = ['One', 'Two', 'ten', 'hello'];

    modifications(names);
}

function modifications(somenames) {
    async.each(somenames, function (one_name, callback) {
        var random_num = Math.floor((Math.random() * 100000000) + 1);

        seconds_values.push(one_name + '_' + random_num);
        callback();
    }, function(err){
        async.each(seconds_values, function (one_value, callback) {
            console.log(one_value);
            callback();
        },
        function(err){
            console.log('==== The END ===');
        });
    });
}

我试图将迭代器分配给变量,以使代码更具可读性。

var async = require('async');
var seconds_values = [];

process();

function process() {
    var names = ['One', 'Two', 'ten', 'hello'];

    modifications(names);
}

var first_function = function (one_name, callback) {
    var random_num = Math.floor((Math.random() * 100000000) + 1);

    seconds_values.push(one_name + '_' + random_num);
    callback();
}

function modifications(somenames) {
    async.each(somenames, first_function, function(err){
        async.each(seconds_values, function (one_value, callback) {
            console.log(one_value);
            callback();
        },
        function(err){
            console.log('==== The END ===');
        });
    });
}

第二个脚本给出了以下错误:

iterator(x, only_once(done) );
        ^
TypeError: undefined is not a function

我想我在这里缺少一些基本的东西。如果可能的话,你能指出我的意思吗?

1 个答案:

答案 0 :(得分:1)

发生错误是因为当process运行时,它会调用modifications,但此时尚未定义first_function

您可以选择两个选项:

1.在流程调用之前输出声明:

var first_function = function (one_name, callback) {
    var random_num = Math.floor((Math.random() * 100000000) + 1);

    seconds_values.push(one_name + '_' + random_num);
    callback();
}
process();

2。使用函数声明:

function first_function(one_name, callback) {
    var random_num = Math.floor((Math.random() * 100000000) + 1);

    seconds_values.push(one_name + '_' + random_num);
    callback();
}

另见:Link