Javascript 承诺mysql-结束时的单捕获
我使用并尝试在链承诺中只使用一个catch块,但当我在上抛出错误时,块catch块并没有对此错误做出反应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
\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之前声明连接
变量,然后在中使用它,然后在块后面使用它。你怎么认为?