当前位置: 首页 > 面试题库 >

Nodejs同步对于每个循环

华誉
2023-03-14
问题内容

我想为每个循环做一个,但要使其同步运行。循环的每次迭代都将执行http.get调用,并返回json以将值插入数据库中。问题是for循环异步运行,这导致所有http.gets一次全部运行,并且我的数据库最终没有插入所有数据。我正在使用async-
foreach尝试执行我想要的操作它可以做到,但是如果我能以正确的方式做到这一点,我就不必使用它。

mCardImport = require('m_cardImport.js');
var http = require('http');
app.get('/path/hi', function(req, res) {

mCardImport.getList(function(sets) {
  forEach(sets, function(item, index, arr) {
    theUrl = 'http://' + sets.set_code + '.json';
    http.get(theUrl, function(res) {

      var jsonData = '';
      res.on('data', function(chunk) {
        jsonData += chunk;
      });

      res.on('end', function() {
        var theResponse = JSON.parse(jsonData);
        mCardImport.importResponse(theResponse.list, theResponse.code, function(theSet) {
          console.log("SET: " + theSet);
        });
      });
    });
  });
});
});

和我的模特

exports.importResponse = function(cardList, setCode, callback) {

mysqlLib.getConnection(function(err, connection) {

forEach(cardList, function(item, index, arr) {

  var theSql = "INSERT INTO table (name, code, multid, collector_set_num) VALUES "
   + "(?, ?, ?, ?) ON DUPLICATE KEY UPDATE id=id";
  connection.query(theSql, [item.name, setCode, item.multid, item.number], function(err, results) {
    if (err) {
      console.log(err);
    };
  });
});
});
callback(setCode);
};

问题答案:

我发现在完成每个调用后,我没有释放mysql连接,这将连接捆绑在一起,导致连接失败,并且似乎是同步问题。

在显式调用connection.release();它之后,即使以异步方式,我的代码也可以正常工作100%。

感谢那些发布此问题的人。



 类似资料:
  • 问题内容: 这是Java代码的片段: 它显示5。但是为什么声明了for循环的声明部分,却没有声明? 在uu上,您将引用2D数组…这不是一项作业。我正在准备Java认证。干杯 问题答案: 由于你是一个。因此,当您对其进行迭代时,您将首先获得,然后可以对该数组进行迭代以获取单个元素。 因此,您的外部循环具有as类型,因此具有该声明。如果您在另一个内循环中进行迭代,则将得到以下类型:-

  • 考虑这个简单的例子: 此代码将打印,但是,如果我对每个

  • 这是一个非常基本的问题,但我不理解for each group是如何工作的。我想把没有子节的相邻顶层节合并到一个列表中。如果有带有小节的部分,我想以不同的方式对待它们,保持顶层不变,并将子部分合并到一个列表中。我不想把这些混为一谈。 源XML 期望的结果 XSLT片段这绝对是不正确的。此外,这不是我尝试过的唯一方式,只是最不混乱的帖子。我认为对于每个组应该工作的方式是,我一直得到一个错误,不允许将

  • 问题内容: 我可以从数组中读取每种语法的数据: 但是有可能同样填充数组。说,有价值观? 我没有发明这样的方法,而是想问你我是否错。 问题答案: 在Java Docs中 , for-each循环隐藏了迭代器,因此您无法调用remove。因此,for-each 覆盖绝大多数案例。 因此,简单来说,不可能填充数组。

  • 正如标题所问, 假设我有一个(如,,等等),有大量的。 > 这里的情况是,我想使用一个for-each方法对他们所有人做同样的事情。 问题是,当符合条件时,您只能使用方法迭代。 P. S.我知道你可以这样做: 我只需要知道是否有其他方法可以为每个方法使用

  • 我是NodeJs的初学者,请原谅。下面的lambda函数是在S3中压缩/压缩文件,并将压缩后的文件上传回S3。包含要压缩的键的列表。如果您注意到(listOfKeys中的const file)的