2015-10-17 83 views
0

我看到這個問題在這裏出現了很多次,但沒有一個解決方案爲我工作。下面是代碼:貓鼬回調函數沒有觸發

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(); 

所以,當我運行該腳本,它會記錄它連接的,它創造了阿龍,跳過「沒有錯誤」,只是日誌「完成」。值得一提的是,我是貓鼬和節點的完全搭檔,如果這是一個簡單的問題,那麼很抱歉,但我無法弄清楚。

回答

0

這是因爲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

+0

這個工作,非常感謝你 –

+0

歡迎)))然後請標明答案正確 – Gor