promise-mysql - 结尾的单个捕获

时间:2017-03-13 11:22:58

标签: javascript es6-promise

我使用promise-mysql并且我尝试在链承诺中仅使用一个 catch 块但是当我在中抛出错误然后 catch < / em> block没有对此错误做出反应。

_this._mailboxDbPool._dbPool.getConnection().then(function (connection) {
  connection.query(_this.checkMailboxExist({
    username: options.username,
    domain: options.domain
  }))
    //  Check mailbox exist
    .then(function (result) {
        throw new Error('Teset error');
        return connection.query(queryDomainExist);
    });
})
.catch((err) => {
   //  Don't react
   console.log("Fake error");
})

我也可以在第一个然后块中返回带有连接作为Object的结果,但它会很笨重而且不优雅。如何只使用一个用于 promise-mysql 的catch块重写代码?

感谢。

3 个答案:

答案 0 :(得分:0)

我认为你必须首先在内部块中捕获它。

    _this._mailboxDbPool._dbPool.getConnection().then(function (connection){connection.query(_this.checkMailboxExist({
username: options.username,
domain: options.domain
   }))
//  Check mailbox exist
.then(function (result) {
    throw new Error('Teset error');
    return connection.query(queryDomainExist);
}).catch((err) => {throw err;});
  }).catch((err) => {
  //  Don't react
   console.log("Fake error");
  })

答案 1 :(得分:0)

您可以通过这种方式构建Promise,而不是嵌套Promise。 这里有单一的Promise链,错误将在catch中找到。

_this._mailboxDbPool._dbPool.getConnection()
  .then(function(connection) {
    return connection.query(_this.checkMailboxExist({
      username: options.username,
      domain: options.domain
    }))
  })
  //  Check mailbox exist
  .then(function(result) {
    throw new Error('Teset error');
    return connection.query(queryDomainExist);
  });
  .catch((err) => {
    //  Don't react
    console.log("Fake error");
  })

答案 2 :(得分:0)

您需要在第一个函数中返回promise以允许链接发生。以下是使用getConnectionquery方法模拟的示例代码:

function getConnection() {
    return Promise.resolve();
}

function query() {
    return Promise.resolve();
}

getConnection().then(() => {
    return query().then(() => {
      throw new Error('Bleh');
  });
}).catch(err => {
    console.log('Oh no', err);
});