回调未执行

时间:2016-02-02 00:19:24

标签: javascript callback

我是异步编程的新手,我一直在努力理解回调。我无法理解我做错了什么?回调根本不会运行。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/movies');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    console.log('Connected to mongodb.');

    var movieSchema = mongoose.Schema({
        title: String,
        release_date: Date,
        cast: Array
    });

    movieSchema.methods.AddMovie = function AddMovie(callback) {
        console.log(this.title);
    };

    var Movie = mongoose.model('Movies', movieSchema);

    var revenant = new Movie({
        title: 'The Revenant',
        release_date: new Date('2015-12-25'),
        cast: ['leonardo dicaprio']
    });

    var callback = function(err, data) {
        if (err) console.error(err);
        else console.log(data);
    }

    revenant.AddMovie(callback);
});

1 个答案:

答案 0 :(得分:0)

您致电revenant.AddMovie并传入您定义的callback功能。您进一步定义AddMovie并接受callback作为参数,但是您实际上并没有实际调用它。您似乎只是在调用AddMovie时将电影标题记录到控制台。实际上你没有对传入的回调函数做任何事情。

movieSchema.methods.AddMovie = function AddMovie(callback) {
  console.log(this.title);
};

在那里你需要实际调用回调函数。像这样:

movieSchema.methods.AddMovie = function AddMovie(callback) {
  if (someError) return callback(someError);
  callback(null, data);
}

我在写回调和异步代码的那一天回复了this post。快速阅读。我尝试使用非常简单的例子。