Nodejs同步对于每个循环

我想为每个循环做一个,但要使其同步运行。循环的每次迭代都将执行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%。

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

以上是 Nodejs同步对于每个循环 的全部内容, 来源链接: utcz.com/qa/408769.html

回到顶部