2011-10-18 11 views
5

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?

+0

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

Odpowiedz

5

Można użyć obiektu połączenia błędzie wydarzenie:

var connection = mongoose.createConnection('mongodb://127.0.0.1/test'), 
    BlogPost = connection.model('BlogPost', BlogPostSchema); 

connection.on("error", function(errorObject){ 
    console.log(errorObject); 
    ... 
}); 
+1

To nadal nie działa, błędy są nadal połknięte, a rzut w trzecim zapisie nie działa, nic nie jest drukowane na konsoli. Nadal badam to. – BrutalDev

Powiązane problemy