Javascript Node.js Puppeter mysql-使用mysql在循环内的数据库中插入获取的值

Javascript Node.js Puppeter mysql-使用mysql在循环内的数据库中插入获取的值,javascript,mysql,node.js,puppeteer,node-mysql,Javascript,Mysql,Node.js,Puppeteer,Node Mysql,我正在使用node.js和puppeter获取一些数据。。。现在我想在数据库中插入获取的数据。。。使用mysql。下面的方法似乎有效。。。然而让我困惑的是,在console.log中('DB insert successful.Record:'+i);总是落后,过了一段时间它就停止了。。。尽管仍有记录可用的表 这是我的应用程序: let tableCell01; let tableCell01Val; let tableCell02; let tableCell02Val;

我正在使用node.js和puppeter获取一些数据。。。现在我想在数据库中插入获取的数据。。。使用mysql。下面的方法似乎有效。。。然而让我困惑的是,在console.log中('DB insert successful.Record:'+i);总是落后,过了一段时间它就停止了。。。尽管仍有记录可用的表

这是我的应用程序:

  let tableCell01;
  let tableCell01Val;
  let tableCell02;
  let tableCell02Val;

  const tableRows = await page.$$('table.tableFile2 > tbody > tr');

  for (let i=1; i < tableRows.length; i++){

    tableRow = tableRows[i];
    tableCell01 = await tableRow.$('td:nth-child(1) a');
    tableCell01Val = await page.evaluate( tableCell01 => tableCell01.innerText, tableCell01 );
    tableCell02 = await tableRow.$('td:nth-child(2)');
    tableCell02Val = await page.evaluate( tableCell02 => tableCell02.innerText, tableCell02 );

    tableCell02ValA.replace(/(^\s+|\s+$)/g,'');

    console.log('\n');
    console.log('ID: '+tableCell01Val);
    console.log('Company: '+tableCell02Val);
    console.log('Iterator: '+i);

    const insertCompanyList = "INSERT INTO companyList ( company_name, id ) values (?,?)";

    connection.query(insertCompanyList,[tableCell02Val, tableCell01Val],function(err, rows) {
      if (err) {
        console.log(err);
      } else {
        console.log('DB insert successful. Record: '+i);
      }
    });

  }

我错过了什么?我想我需要把连接查询放在一个异步函数中?!比如这里:

只需发送connection.query,您就可以等待它了。您发布的另一个问题的链接与您的问题非常相似

这个问题被反复地问,因为它很难理解,但基本上是连接。query立即运行,跳到下一行,然后在稍后某个时间点(当数据库响应并且事件循环有时间处理它时)
函数(err,rows){}
部分运行。因此,在一些pupeter等待(或其他异步进程)之间,它正在处理
函数(err,rows){}

下一个建议:学会使用
util.promisify
!()

let tableCell01;
让我们一起来看看吧;
让我们看看表02;
让我们一起来看看吧;
const tableRows=等待页面。$$('table.tableFile2>tbody>tr');
for(设i=1;itableCell01.innerText,tableCell01);
tableCell02=等待tableRow.$('td:n个孩子(2)');
tableCell02Val=wait page.evaluate(tableCell02=>tableCell02.innerText,tableCell02);
tableCell02ValA.replace(/(^\s+|\s+$)/g',);
console.log('\n');
console.log('ID:'+tableCell01Val);
console.log('Company:'+tableCell02Val);
log('Iterator:'+i);
const insertCompanyList=“插入公司列表(公司名称,id)值(?,)”;
让行=等待新承诺((解决、拒绝)=>{
查询(insertCompanyList[tableCell02Val,tableCell01Val],函数(err,rows){
如果(错误){
控制台日志(err);
拒绝(错误);
}否则{
console.log('DB insert successful.Record:'+i);
解析(行);
}
});
});
}

只要提示connection.query,您就可以等待它了。您发布的另一个问题的链接与您的问题非常相似

这个问题被反复地问,因为它很难理解,但基本上是连接。query立即运行,跳到下一行,然后在稍后某个时间点(当数据库响应并且事件循环有时间处理它时)
函数(err,rows){}
部分运行。因此,在一些pupeter等待(或其他异步进程)之间,它正在处理
函数(err,rows){}

下一个建议:学会使用
util.promisify
!()

let tableCell01;
让我们一起来看看吧;
让我们看看表02;
让我们一起来看看吧;
const tableRows=等待页面。$$('table.tableFile2>tbody>tr');
for(设i=1;itableCell01.innerText,tableCell01);
tableCell02=等待tableRow.$('td:n个孩子(2)');
tableCell02Val=wait page.evaluate(tableCell02=>tableCell02.innerText,tableCell02);
tableCell02ValA.replace(/(^\s+|\s+$)/g',);
console.log('\n');
console.log('ID:'+tableCell01Val);
console.log('Company:'+tableCell02Val);
log('Iterator:'+i);
const insertCompanyList=“插入公司列表(公司名称,id)值(?,)”;
让行=等待新承诺((解决、拒绝)=>{
查询(insertCompanyList[tableCell02Val,tableCell01Val],函数(err,rows){
如果(错误){
控制台日志(err);
拒绝(错误);
}否则{
console.log('DB insert successful.Record:'+i);
解析(行);
}
});
});
}

您只需承诺连接。query您只需承诺连接。queryExcellent!非常感谢。。。我来看看util.promisify:-)太好了!非常感谢。。。我将查看util.promisify:-)
ID: 3136
Company: Company A
Iterator: 1

ID: 3143
Company: Company B
Iterator: 2
DB insert successful. Record: 1

ID: 4497
Company: Company C
Iterator: 3

ID: 3164
Company: Company D
Iterator: 4

ID: 3219
Company: Company E
Iterator: 5

ID: 3071
Company: Company F
Iterator: 6

ID: 3184
Company: Company G
Iterator: 7
DB insert successful. Record: 2

ID: 3130
Company: Company H
Iterator: 8
DB insert successful. Record: 3
DB insert successful. Record: 4
DB insert successful. Record: 5
DB insert successful. Record: 6
DB insert successful. Record: 7
DB insert successful. Record: 8        

ID: 1844
Company: Company I
Iterator: 1

ID: 3687
Company: Company J
Iterator: 2

ID: 4514
Company: ECompany K
Iterator: 3

ID: 3635
Company: Company L
Iterator: 4

ID: 3884
Company: Company M
Iterator: 5

ID: 3482
Company: Company N
Iterator: 6
DB insert successful. Record: 1

ID: 3482
Company: Company O
Iterator: 7

ID: 1827
Company: Company P
Iterator: 8
DB insert successful. Record: 2

ID: 1827
Company: Company Q
Iterator: 9

ID: 6465
Company: Company R
Iterator: 10

ID: 0731
Company: Company S
Country: B9
Iterator: 11
No pagination!
DB insert successful. Record: 3
DB insert successful. Record: 4
DB insert successful. Record: 5
DB insert successful. Record: 6
DB insert successful. Record: 7
DB insert successful. Record: 8
DB insert successful. Record: 9
DB insert successful. Record: 10
DB insert successful. Record: 11
  let tableCell01;
  let tableCell01Val;
  let tableCell02;
  let tableCell02Val;

  const tableRows = await page.$$('table.tableFile2 > tbody > tr');

  for (let i=1; i < tableRows.length; i++){

    tableRow = tableRows[i];
    tableCell01 = await tableRow.$('td:nth-child(1) a');
    tableCell01Val = await page.evaluate( tableCell01 => tableCell01.innerText, tableCell01 );
    tableCell02 = await tableRow.$('td:nth-child(2)');
    tableCell02Val = await page.evaluate( tableCell02 => tableCell02.innerText, tableCell02 );

    tableCell02ValA.replace(/(^\s+|\s+$)/g,'');

    console.log('\n');
    console.log('ID: '+tableCell01Val);
    console.log('Company: '+tableCell02Val);
    console.log('Iterator: '+i);

    const insertCompanyList = "INSERT INTO companyList ( company_name, id ) values (?,?)";

    let rows = await new Promise((resolve,reject)=>{
      connection.query(insertCompanyList,[tableCell02Val, tableCell01Val],function(err, rows) {
        if (err) {
          console.log(err);
          reject(err);
        } else {
          console.log('DB insert successful. Record: '+i);
          resolve(rows);
        }
      });
    });

  }