Tutaj jest odosobnionym przykładem problemu:Mongoose.js pochłania błędy w zaproszeniu zwrotnym?
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")
})
Każdy błąd rzucony wewnątrz zwrotnego ratowania produkuje żadnego wyjścia w konsoli. Wydaje się, że wykonanie zatrzymało się na tej linii.
Dlaczego tak się dzieje?
Czy istnieje lepszy sposób na tworzenie callbacków, być może przy użyciu obietnicy?
Otwarty sprawę dotyczącą tego problemu jako dołączenie do wydarzenia błędów nie ma wpływu na błędy zwrotnych: https://github.com/Automattic/mongoose/issues/3273 – BrutalDev