395980
最近在写一个爬虫程序,遇到一个问题,在使用async包的eachSeries函数时碰到,该函数并没有完全执行完任务队列中的任务,代码如下:
- 连接mysql数据库,从连接池执行任务,代码如下:
"use strict";
const mysql = require('mysql');
const config = require('../config');
let pool = mysql.createPool(config.db);
/**
* 执行查询语句
* @param {String} sql
* @param {Array} params
* @param {Function} callback
*/
exports.query = (sql, params, callback) => {
pool.getConnection( (err, connection) => {
if (err) {
return callback(err, null);
}
connection.query(sql, params, callback);
});
};
- 通过async的eachSeries执行一组串行的异步任务代码如下:
exports.classList = (list, callback) => {
console.log(list.length); // => 16条数据
// 执行串行的异步任务【16个】,实际运行该代码后只执行了5次,eachSeries就退出了
async.eachSeries(list, function (item, next) {
db.query('select * from `class_list` where `id` =? limit 1', [item.id], (err, data) => {
if (err) {
return next(err);
}
if (Array.isArray(data) && data.length >= 1) {
// 数据已存在,更新
db.query('update `class_list` set `name`=?, `url`=? where `id`=?', [item.name, item.url, item.id], next);
} else {
// 数据不存在,添加
db.query('insert into `class_list`(`id`,`url`,`name`) values (?, ?, ?)', [item.id, item.url, item.name], next);
}
});
}, callback);
};
我怀疑是数据库的连接池代码问题,不太请求,问题也不够清晰,有大神凑合帮忙看一下吧