SQL语句在一次插入后停止

时间:2018-02-07 19:22:31

标签: javascript mysql node.js node-mysql

我试图多次插入我的数据库,但是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}")`);
    });

});

1 个答案:

答案 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());
相关问题