Domanda

Ecco un esempio isolato del problema:

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")
})

Ogni errore gettato all'interno del salvataggio di callback non produce alcun output nella console. L'esecuzione sembra pausa in quella riga.

Perché accade questo?

C'è un modo migliore per callback di scrittura, magari utilizzando una promessa?

È stato utile?

Soluzione

È possibile utilizzare oggetto di connessione Errore evento:

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

connection.on("error", function(errorObject){
  console.log(errorObject);
  ...
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top