来自C ++和Python,我仍然在Javascript异步泛滥中苦苦挣扎。有时候它非常有用,但是有时候我只是不编写可怕的代码就看不到如何适应它。
我有一个Node.js + Express CRUD设置,在继续请求之前,我必须做一些基本的检查。我想在运行最终查询之前检查http POST字段是否与数据库字段匹配。我无法将其声明为异步函数并使用await,因为它必须与给定的接口匹配。
showColumns(dbTable)
返回带有SHOW COLUMNS查询的数据库前提。
我发现的唯一解决方案是:
database.showColumns(dbTable).then((columns)=>{
//But do I really need to put all my logic inside a then???
let row = Object.keys(req.body).filter({}.hasOwnProperty.bind(columns));
//... all the rest of the logic goes here
});
您认为,最干净/最优雅的解决方法是什么?
答案 0 :(得分:3)
database.showColumns(dbTable)
.then(columns => this.handleColumns(columns))
.then(parsedData => this.doSthElse(parsedData);
您可以将逻辑提取为单独的方法。但是,必须在内部调用它,因为它是异步操作完成后触发的回调。
或者,您可以考虑使用生成器,异步/等待函数或promise。
答案 1 :(得分:1)
您可以为此使用异步/等待。
(async function() {
try {
var columns = await database.showColumns(dbTable)
let row = Object.keys(req.body).filter({}.hasOwnProperty.bind(columns));
} catch (e) {
console.log("Promise error");
}
})