【问题标题】:How to catch an error of promise in OrientDB?如何在 OrientDB 中捕获 promise 的错误?
【发布时间】:2016-09-03 16:37:36
【问题描述】:
UPDATE: this is not a problem of code. Code works as it should.

I've restarted OrientDB server for few times and then it works as it should.

So, the problem was in OrientDB server, not the code.

Seems like there is no timeout for promise result. So, when I was calling `db.class.get` the promise was stuck without invocation of  `then` or `catch`.

由于一个罕见的巧合,我的问题出现了。代码正常运行。

例如,为什么我在尝试获取类时无法获取回调以捕获错误?

看看这个例子 - http://orientdb.com/docs/master/OrientJS-Class-Classes.html#getting-classes

现在,当我这样做时:

db.class.get('Player')
.then(
    function(player){
        console.log('Retrieved class: ' + player.name);
    }
)
.catch(
    function(err){
        console.log('Getting class Player error:',err)
    }
);

实际上没有记录任何内容。没有错误,没有成功。

这不仅仅是我发现的“虚假”承诺。 我觉得OrientDB的教程太有限了。

那么,如何在上课时发现错误?

【问题讨论】:

  • 嗨,我尝试了你的代码,它对我有用,如果存在,我可以获得类,如果不存在,我会得到错误。所以有什么问题?提前谢谢
  • 这很奇怪。当我的数据库为ok 时,then 函数有效。但是当 db 不是 ok 时,我的控制台中什么都没有 - catch 函数根本没有被调用。当我尝试在server.use 上使用then 时也出现错误,如教程中所示:TypeError: server.use(...).then is not a function 所以,我不使用then。我们可以私聊吗?
  • db not ok 是什么意思?
  • 拜托,让我们在这里谈谈 - temp.mexy.pro/#Kmt2OniG8p(无需注册)

标签: promise try-catch orientdb es6-promise


【解决方案1】:

我已经尝试过你的代码,就我而言,它可以工作!

一开始,我没有创建“Player”类,事实上,你的代码给了我以下输出:

Getting class Player error: { OrientDB.RequestError: No such class: Player
    at Db.<anonymous> (C:\Users\Alberto Brunetti\node_modules\orientjs\lib\db\class\index.js:296:64)
    at Db.tryCatcher (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\util.js:26:23)
    at Promise._settlePromiseFromHandler (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\promise.js:503:31)
    at Promise._settlePromiseAt (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\promise.js:577:18)
    at Async._drainQueue (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\async.js:128:12)
    at Async._drainQueues (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\async.js:133:10)
    at Immediate.Async.drainQueues (C:\Users\Alberto Brunetti\node_modules\bluebird\js\main\async.js:15:14)
    at runCallback (timers.js:574:20)
    at tryOnImmediate (timers.js:554:5)
    at processImmediate [as _immediateCallback] (timers.js:533:5)
  name: 'OrientDB.RequestError',
  message: 'No such class: Player',
  data: {} }

在此代码中,您可以看到您期望的错误消息(第一行)。

希望对你有帮助。

【讨论】:

  • 我已经重启了 OrientDB 服务器几次,然后它就可以正常工作了。所以,问题出在 OrientDB 服务器上,而不是我的代码上。似乎承诺结果没有超时。因此,当我调用 db.class.get 时,承诺在没有调用 thencatch 的情况下被卡住。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2019-04-07
  • 2021-04-21
  • 2017-05-06
  • 2018-01-14
  • 2020-04-17
相关资源
最近更新 更多