javascript - 在 Javascript 中使用异步结果的最简洁方法

标签 javascript node.js asynchronous

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

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

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

});

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

最佳答案

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

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

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

关于javascript - 在 Javascript 中使用异步结果的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51726390/

相关文章:

javascript - 构造函数的对象字面量返回 toString() 方法,但不返回其他方法

javascript - 你如何将 ng-repeat 值推送到 Controller ?

ios - 使用健康数据填充 UITableView?

javascript - 如何将唯一的事件监听器绑定(bind)和取消绑定(bind)到同一对象?

javascript - 让 jQuery tablesorter 处理隐藏/分组的表行

node.js - 我如何使用 multer 上传视频并强制格式为 mp4

node.js - 如何在 Mongoose/MongoDB 中聚合两个集合?

node.js - MQLight Node.js 客户端在空闲时间后停止接收消息。 MQ 8.0.0.3 上的 AMQP/MQ Light

javascript - 循环遍历任务 waterfall - promises bluebird

Javascript 异步循环处理