2016-05-13 3 views
0

У меня есть синтаксическая настройка на expressjs, например here.expressjs not throwing error on Parse query (parse-server)

Но иногда он не показывает ошибок внутри функций анализа. Пример: не отображаются

// Parse Server is setup 
// Parse Server plays nicely with the rest of your web routes 
app.get('/', function(req, res) { 
    var pageQuery = new Parse.Query('Page'); 
    pageQuery.get('id').then(function(page) { 
    someObject.undefinedProp = false; 
    res.send(page); 
    }, function(error) { 
    res.send(error); 
    }); 
}); 

Никаких ошибок, но с этим кодом:

// Parse Server is setup 
// Parse Server plays nicely with the rest of your web routes 
app.get('/', function(req, res) { 
    someObject.undefinedProp = false; 
    res.send('ok'); 
}); 

Я эта ошибкой:

ReferenceError: someObject is not defined 

(Для этого примера я иметь точно такую ​​же конфигурацию, что и Parse Server Example)

Я просто хочу, чтобы ошибки отображались внутри моих функций Parse.

Любые идеи?

Благодарим за помощь!

ответ

0

Ваша проблема на самом деле является проблемой, вызванной обещаниями.

Когда вы вызываете pageQuery.get('id'), метод get возвращает экземпляр Promise. Метод Promise then - это то, как вы настраиваете свой обратный вызов, который будет срабатывать при успешном завершении операции get.

Чтобы получить ссылку на сообщение об ошибке, которое должно произойти при попытке ссылки на someObject.undefinedProp, вам также необходимо настроить обработчик ошибок на этом объекте Promise, вызвав его метод catch.

app.get('/', function(req, res) { 
    var pageQuery = new Parse.Query('Page'); 

    pageQuery.get('id').then(function(page) { 
    someObject.undefinedProp = false; 
    // the error thrown here will be caught by the Promise object 
    // and will only be available to the catch callback below 
    res.send(page); 

    }, function(error) { 
    // this second callback passed to the then method will only 
    // catch errors thrown by the pageQuery.get method, not errors 
    // generated by the preceding callback 
    res.send(error); 

    }).catch(function (err) { 
    // the err in this scope will be your ReferenceError 
    doSomething(err); 
    }); 
}); 

Здесь, ознакомьтесь со следующей статьей и прокрутите вниз к заголовку раздела «Дополнительно ошибка # 2: поймать() не так же, как тогда (нуль, ...)».

https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html

+0

Приятно поблагодарить вас! – Poltib