mysql - 在承诺链中停止另一个 .then() 执行
问题描述
我在nodejs和mysql中有程序,如下所示
db.query()
.then(1)
.then(2)
.then(3)
.catch()
我正在检查数据库中的值then(1)
并尝试从那里返回响应。在then(2)
,我正在执行另一个代码,该代码使用来自结果的一些数据,then(1)
依此类推。
我的问题:当返回响应时then(1)
,catch()
正在调用(因为then(2)
有错误,没有从中获取数据then(1)
)。那么有什么办法可以阻止进一步执行并且then(1)
无法调用?then(2)
catch()
db.query('query......', [val1, val2])
.then(rslt => { return res.json({ mssg: "Email already exists!", error: "Email already exists!" }) })
.then(user => { return db.query('INSERT INTO ', value, (err, res, flds) => { err ? reject(err) : resolve(res) }) })
.then(user => { return res.json({ mssg: "Success", success: true}) })
.catch( (err) => { console.log(err) })
解决方案
您可以(并且应该)使用异步函数,而不是使用 Promise 对象的低级.then()
API:
async function doTheThing() {
try {
const result = await db.query('...');
if (result) { // user exists
return res.json({...}); // this will end the entire function
}
const user = await db.query('...');
return res.json({...}); // success
} catch (err) {
console.log(err); // I don't recommend doing this. try/catch should be for recovery
}
}
推荐阅读
- java - java.lang.ClassNotFoundException: com.vuforia.VuforiaUnityPlayer.VuforiaInitializer
- ms-access - 在查询中使用多选列表框
- r - R:抑制基本图形绘图但将绘图作为对象返回
- uwp - 项目创建后如何更改应用程序名称?
- python - Python 版本无关的字符串处理
- javascript - 对 Prototype 使用非常简单的字段验证 - 但是,雅虎电子邮件地址似乎没有通过。有任何想法吗?
- sql - 当 where 子句中的变量时 Oracle SQL 失败
- css - 如何将 css-next 变量分配给另一个变量?
- sql - 提取 XML 值
- javascript - Array.prototype.filter 的猴子补丁破坏了 AngularJS 1.6