Javascript undefined不是function-Node.JS

Javascript undefined不是function-Node.JS,javascript,node.js,callback,Javascript,Node.js,Callback,您能帮我理解为什么我收到“如果不是函数,则未定义”错误消息的原因吗!: 这是我的密码: function write(dest, data, cb) { var safe_write = function (cb) { var tmpname = tempFile(dest) fs.writeFile(tmpname, data, function (err) { if

您能帮我理解为什么我收到“如果不是函数,则未定义”错误消息的原因吗!:

这是我的密码:

function write(dest, data, cb) {
            var safe_write = function (cb) {
                var tmpname = tempFile(dest)
                fs.writeFile(tmpname, data, function (err) {
                    if (err)
                        return cb(err)
                    renameTmp(tmpname, dest, cb)
                })
            }

            safe_write(function (err) {
                if (err && err.code === 'ENOENT') {
                    mkdirp(Path.dirname(dest), function (err) {
                        if (err)
                            return cb(err)
                        safe_write(cb)
                    })
                } else {
                    cb(err);// The error message is coming from here!
                }
            })
        }
我在这样的地方打电话:

module.exports.write_json = function (name, value, cb) {
    var foo = nano.db.use('foo');
    value['_id'] = value['name'];
    foo.get(value['name'], function (err, body) {
        if (err && err.error == "not_found") {
            foo.insert(value, function (err, response) {
                write(name, JSON.stringify(value, null, '\t'), cb(err))
            })
        } else {
            var data = lodash.merge(body, value);
            foo.atomic("update", "inplace", value['name'], data, function (err, response) {
                write(name, JSON.stringify(data, null, '\t'), cb(err))
            })
        }
    });
}
调用
write()
时,传递的是
cb(err)

如果
cb
是一个函数,则
cb(err)
调用该函数,返回值是传递给
write()
的值。这就是您的
未定义的
的来源

您的代码并不完全清楚这一点,但您可能应该通过
cb

write(name, JSON.stringify(data, null, '\t'), cb)

这意味着
cb
未定义的
。你是说我在哪里调用它?你如何调用
write()
?您可能缺少参数或所述参数未定义。这意味着参数
cb
没有值;如何调用
write()
?谢谢@Pointy和MinusFour;我更新了代码以查看如何调用它;我仍然不知道我为什么会犯这个错误!你是个和蔼可亲的人!我想知道为什么?!我还是不知道为什么@用户3399784当您提到一个函数并在后面加上
(xxx)
,表示“请立即调用此函数”。这就是JavaScript表达式的工作原理
cb(err)
表示“调用
cb
引用的函数,传递
err
的值”。它与对
write()
函数的调用没有什么不同,请参见?
write(name, JSON.stringify(data, null, '\t'), cb)