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)