Mongoose.js吞下保存callback中的错误?

这是一个孤立的问题的例子:

var assert = require('assert') var mongoose = require('mongoose') var Schema = mongoose.Schema , ObjectId = Schema.ObjectId; mongoose.connect("mongodb://localhost/some_db"); var BlogPostSchema = new Schema({ title : String , body : String , date : Date }); var BlogPost = mongoose.model('BlogPost', BlogPostSchema); var bp = new BlogPost({title: 'blogpost 0'}) bp.save(function(err) { console.log("this will print 0") assert.equal(1, 1) console.log("0 ... no problem") }) var bp1 = new BlogPost({title: 'blogpost 1'}) bp1.save(function(err) { console.log("this will print 1") assert.equal(1, 2) console.log("this will NOT print") }) var bp2 = new BlogPost({title: 'blogpost 2'}) bp2.save(function(err) { console.log("this will print 2") throw "this error is swallowed" console.log("this will NOT print") }) 

在保存callback中抛出的任何错误都不会在控制台中产生输出。 执行似乎暂停在那一行。

为什么会发生?

有没有更好的方法来编写callback,也许使用Promise?

您可以使用连接对象错误事件:

 var connection = mongoose.createConnection('mongodb://127.0.0.1/test'), BlogPost = connection.model('BlogPost', BlogPostSchema); connection.on("error", function(errorObject){ console.log(errorObject); ... });