3

来自 C++ 和 Python,我仍然在与无处不在的 Javascript 异步作斗争。有时它非常有用,但有时我只是不知道如何在不编写糟糕代码的情况下适应它。

我有一个 Node.js + Express CRUD 设置,在继续请求之前我必须做一些基本的检查。我想在运行最终查询之前检查 http POST 字段是否与数据库字段匹配。我不能将它声明为异步函数并使用等待,因为它必须匹配给定的接口。

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

});

在您看来,解决这个问题的最干净/最优雅的方法是什么?

4

2 回答 2

3
database.showColumns(dbTable)
  .then(columns => this.handleColumns(columns))
  .then(parsedData => this.doSthElse(parsedData);

您可以将逻辑提取到单独的方法中。但是,它必须在 then 内部调用,因为它是异步操作完成后触发的回调。

或者,您可以考虑使用生成器、异步/等待函数或承诺。

于 2018-08-07T12:07:51.237 回答
1

您可以为此使用 async/await。

(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");
    }
})
于 2018-08-07T12:10:22.073 回答