我试图多次插入我的数据库,但是INSERT sql语句只在它第一次被调用时才起作用,然后执行继续而不插入。我不知道这是否相关,但我使用Cheerio从网页抓取中获取数据。
此代码运行正常,不会产生错误。然而,它执行 SQL查询只有一次,第一次被调用。为什么呢?
这是我的代码
remainingList.map(function (val) {
const options = {
uri: val,
transform: function (body) {
return cheerio.load(body);
}
};
rp(options).then(($) => {
title = $(".Lien5").text();
price = $(".Texte8").text();
contenu = $(".contenu").text();
}).then(($) => {
connection.query(`INSERT INTO WatchesList (url, title, price) VALUES ("${val}", "${title}", "${price}")`);
});
});
答案 0 :(得分:0)
文档说:
使用end()关闭连接,确保在将退出数据包发送到mysql服务器之前执行所有剩余的查询。
请尝试执行以下操作:
const insertPromises = remainingList.map(function (val) {
const options = {
uri: val,
transform: function (body) {
return cheerio.load(body);
}
};
return rp(options).then(($) => {
title = $(".Lien5").text();
price = $(".Texte8").text();
contenu = $(".contenu").text();
}).then(($) => {
return new Promise((resolve, reject) => {
connection.query(`INSERT INTO WatchesList (url, title, price) VALUES ("${val}", "${title}", "${price}")`,
(error) => {
if (error) {
reject();
} else {
resolve();
}
});
});
});
});
Promise.all(insertPromises).then(() => connection.end());