2016-11-19 24 views
0

我有以下代码:为什么猫鼬代码中的回调文件为空?

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test') 
var Schema = mongoose.Schema; 
var schema = new Schema({name : String, inventory: {}}); 
var Character = mongoose.model('Character',schema); 
var Frodo = new Character({name: 'Frodo',inventory:{ringOfPower: 1}}); 
Frodo.save(); 
Character.findOne({name : 'Frodo'},function(error, character){ 
    console.log(character); 
}); 

我运行它作为节点optionminimize.js和空是越来越记录到console.It MongoDB中得到了坚持好吧,我开了一个MongoDB的外壳和跑

db.characters.findOne({name:'Frodo'}) 

,并得到以下结果:

{ 
     "_id" : ObjectId("582fc3bab386f00ed0e7fede"), 
     "name" : "Frodo", 
     "inventory" : { 
       "ringOfPower" : 1 
     }, 
     "__v" : 0 
} 

为什么在回调文件参数接收空?

回答

1

Frodo.save()是一个异步调用,因此返回无极,你通过搜索Charachter.findOne立即行之后发生的Frodo.save()承诺得到解决之前。

所以,字符保存成功后必须执行的搜索,否则你所说的返回null,所以你的代码必须是这样的:

Frodo.save() 
    .then(function() { 
    Character.findOne({name : 'Frodo'}, function(error, character) { 
     console.log(character); 
    }); 
    })