我使用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块重写代码?
感谢。
答案 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以允许链接发生。以下是使用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);
});