undefined不是函数Node.JS

时间:2015-08-31 22:16:01

标签: 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 (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))
            })
        }
    });
}

1 个答案:

答案 0 :(得分:1)

当您致电write()时,您正在通过cb(err)

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

如果cb是一个函数,则cb(err) 会调用函数,返回值将传递给write()。这就是你undefined的来源。

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

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