undefined 不是函数-Node.JS
undefined is not a function-Node.JS
你能帮我理解我收到 "undefined if not a 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)
调用函数 并且 return 值是传递给 write()
.这就是您的 undefined
的来源。
从你的代码中看不完全清楚,但可能你应该传递 cb
:
write(name, JSON.stringify(data, null, '\t'), cb)
你能帮我理解我收到 "undefined if not a 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)
调用函数 并且 return 值是传递给 write()
.这就是您的 undefined
的来源。
从你的代码中看不完全清楚,但可能你应该传递 cb
:
write(name, JSON.stringify(data, null, '\t'), cb)