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 沉默,而不是一个字。
预期结果(在我看来):
console.log('foo', bar);
ReferenceError: bar is not defined
我错过了什么?
环境:
node -v
v0.12.4
答案 0 :(得分:4)
不会吞下该错误,但如果then
或catch
处理程序导致错误,那么当前的承诺将被该错误拒绝。
在您的情况下,ReferenceError
被抛出,但它拒绝承诺。通过附加catch
处理程序,您可以看到传播的实际错误,如此
new Promise(function (resolve, reject) {
resolve(true);
})
.then(function (result) {
console.log(result, bar);
})
.catch(function (er) {
console.error('Inside Catch', er);
});
现在你会看到
Inside Catch [ReferenceError: bar is not defined]
进一步阅读: