db.collection.findOne
- это асинхронная операция (MongoDB, но это на самом деле не имеет значения здесь), поэтому я обернуваю ее в обещание.Почему это обещание терпит неудачу?
var letsDoSomething = new Promise(function(resolve, reject){
db.collection('stackoverflow').findOne({question: true}, function(err, question){
resolve(question); // let's pretend we found a question here, and it is now resolving
})
})
letsDoSomething.then(function(myData){ // it resolves
console.log('foo', bar); // since 'bar' is undefined, this should fail – why doesn't it? No error messages, it goes completely silent
});
Почему не отладчик выдаст ошибку, когда я пытаюсь войти bar
, который просто не существует? Он просто идет poof молчание, а не слово.
Ожидаемый результат (на мой взгляд):
Что мне не хватает?
Окружающая среда:
node -v
v0.12.4
, возможно, «притвориться, что мы нашли вопрос здесь», недостаточно, чтобы фактически решить обещание –
Нет, он разрешит обещание! – subZero
Используйте io.js, а не nodejs, и используйте событие 'process.on (« unhandledRejection ») или используйте библиотеку, которая выпадает, как Bluebird. –