5
這是問題的一個孤立的例子:Mongoose.js吞下保存回調中的錯誤?
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")
})
保存回調內部拋出的任何錯誤產生在控制檯沒有輸出。執行似乎暫停在該行。
爲什麼會發生這種情況?
有沒有更好的方法來編寫回調,也許使用Promise?
打開的情況下這個問題,因爲連接到錯誤事件對回調錯誤沒有影響:https://github.com/Automattic/mongoose/issues/3273 – BrutalDev