猫鼬回调函数没有触发
问题描述:
我看到这个问题在这里出现了很多次,但没有一个解决方案为我工作。下面是代码:猫鼬回调函数没有触发
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var db = mongoose.connection;
var dbUrl = 'mongodb://george:[email protected]:37234/mydb';
var perosonSchema = new Schema({
id: Number,
name: String,
age: Number,
stories: [{type: Schema.Types.ObjectId, ref: "Story"}]
});
var storySchema = new Schema({
_creator: {type: Number, ref: "Person"},
title: String,
fans: [{type: Number, ref: "Person"}]
});
var Story = mongoose.model("Story", storySchema);
var Person = mongoose.model("Person", perosonSchema);
db.on('error', function() {
console.log('there was an error communicating with the database');
});
mongoose.connect(dbUrl);
console.log('connected!');
var aaron = new Person({id: 0, name: "Aaron", age: 32});
console.log("created aaron");
aaron.save(function(err) {
console.log("no error");
var story1 = new Story({
title: "Once upon a time",
_creator: aaron.id
});
story1.save(function (err){
if(err) return console.log("err");
});
});
console.log("finished");
db.close();
process.exit();
所以,当我运行该脚本,它会记录它连接的,它创造了阿龙,跳过“没有错误”,只是日志“完成”。值得一提的是,我是猫鼬和节点的完全搭档,如果这是一个简单的问题,那么很抱歉,但我无法弄清楚。
答
这是因为aaron.save是异步调用,它会调用,但是您的程序不会等待响应,只是继续工作,然后退出进程。当亚伦得救时,进程退出; 要修复它,只需调用完成,在回调函数db.close 像这样的事情
aaron.save(function(err) {
console.log("no error");
var story1 = new Story({
title: "Once upon a time",
_creator: aaron.id
});
story1.save(function (err){
if(err) return console.log("err");
console.log("finished");
db.close();
process.exit();
});
});
这样你的代码将节省亚伦。节能将创造故事,保存后,节省近db和退出过程后
了解更多关于回调的NodeJS这里here
这个工作,非常感谢你 –
欢迎)))然后请标明答案正确 – Gor