如何在Node.js中动态生成MySQL查询数量?

时间:2019-12-23 12:43:23

标签: mysql node.js asynchronous

我在如何从NodeJS向MySQL服务器发送几个SQL更新查询方面有些挣扎。我需要某种同步执行。

情况

  • 我有一个对象数组。 (让我们说“ formValues”)
  • 这些对象中的某些可能在数据库表中具有对应的行,而其他对象则没有。
  • 我需要对数组中的每个对象执行MySQL查询,以了解需要为MySQL中的新对象创建哪个对象以及仅需要更新哪个对象。
  • 最后,我需要更新/创建MySQL表中的行。
  • 在整个过程中我需要一种回调。

这或多或少是关于如何使用NodeJS解决这种情况的一个普遍问题。据我了解,MySQL查询是异步执行的。

如何才能实现遍历数组以构建条目列表,这些条目需要更新才能在MySQL表中创建? 有任何“同步” MySQL查询吗?

致谢

詹斯

1 个答案:

答案 0 :(得分:0)

切换到异步/等待MySQL客户端可能会真正受益。您正在使用的客户端可能已经对此提供支持。

但是,即使您没有,也无法切换,编写一个将基于回调的mysql转换为基于promise的mysql的帮助函数仍然是最简单的。

有效的方法是:

for(const formValue of formValues) {
   await mysql.query('....');
}

在没有异步/等待和回调的情况下执行此操作要困难得多。

我想一种方法可能是这样的:

function doQueriesForFormValue(formValues, cb) {

   const queries = [];
   for(const formvalue of formValues) {
     queries.push('...');
   }

   runQueries(queries, cb);

}

function runQueries(queries, cb) {

  // Grab the first query
  const currentQuery = queries[0];

  mysql.query(currentQuery, (res, err) {

    if (err) {
       cb(null, err);
    }

    if (currentQueries.length>1) {
      // Do the next query
      runQueries(currentQueries.slice(1), cb);
    } else {
      // call final callback
      cb(true);
    }  

  });

}

我用一些有效的模式编写了an article,以便在Node.js中使用MySQL。也许有帮助