undefined不是一个函数Node.JS

你可以帮我不喜欢的原因,为什么我得到“未定义,如果不是一个function”的错误信息!

这是我的代码:

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)

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

如果cb是一个函数,那么cb(err) 调用该函数 ,返回值是传递给write() 的函数 。 这就是你的undefined来自哪里。

从你的代码中不完全清楚,但可能你应该通过cb

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