Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺mysql-结束时的单捕获_Javascript_Es6 Promise - Fatal编程技术网

Javascript 承诺mysql-结束时的单捕获

Javascript 承诺mysql-结束时的单捕获,javascript,es6-promise,Javascript,Es6 Promise,我使用并尝试在链承诺中只使用一个catch块,但当我在上抛出错误时,块catch块并没有对此错误做出反应 \u this.\u mailboxDbPool.\u dbPool.getConnection()。然后(函数(连接){ connection.query(_this.checkMailboxExist({ 用户名:options.username, 域:options.domain })) //检查邮箱是否存在 .然后(函数(结果){ 抛出新错误(“Teset错误”); 返回connec

我使用并尝试在链承诺中只使用一个catch块,但当我在上抛出错误时,块catch块并没有对此错误做出反应

\u this.\u mailboxDbPool.\u dbPool.getConnection()。然后(函数(连接){
connection.query(_this.checkMailboxExist({
用户名:options.username,
域:options.domain
}))
//检查邮箱是否存在
.然后(函数(结果){
抛出新错误(“Teset错误”);
返回connection.query(queryDomainList);
});
})
.catch((错误)=>{
//不要反应
console.log(“假错误”);
})
我也可以在first-then块中返回连接为对象的结果,但它将是一些数字,而不是优雅的。如何使用promise mysql的一个catch块重写代码


谢谢。

我想你得先在内部街区抓住它

    _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");
  })

而不是嵌套的承诺,你可以这样构造。 这里有一个承诺链,错误将被捕获在
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");
  })

您需要在第一个函数中返回承诺,以允许发生链接。下面是一些模拟了
getConnection
query
方法的示例代码:

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);
});

你不能从你的内在功能中回报承诺<代码>返回连接。查询…我还有一个想法,在启动dbConnection之前声明连接变量,稍后使用这个连接,并使用嵌套的承诺
连接。查询
返回承诺,就像你说的,我可以使用单承诺链。我还需要在下面的
then
块中使用先前的连接
那么
只能返回单参数,我不想返回带有查询结果和连接的对象数据。我想在promise之前声明
连接
变量,然后在
中使用它,然后在
块后面使用它。你怎么认为?