вставить для каждого с асинхронным ожиданием - PullRequest
0 голосов
/ 28 мая 2019

ошибка при выполнении запроса

var records = [{name:'John',age:24},{name:'Sarah',age:28},{name:'Linda',age:23}];

connection.getSession().then(session => {
   async function insertRecords() {
      await Promise.all(records.map(async function (element) {
         let util = {};
         util['name'] = element['name'];
         util['age'] = element['age'] || null;                   
         let query = `INSERT INTO users SET
           name =?,
           age=?
           ON DUPLICATE KEY UPDATE
            name=VALUES(name),
            age=VALUES(age)`;

        session.sql(query).bind([util.name, util.age]).execute()
           .then(() => {})
           .catch((error) => {
              console.error('cannot execute the query');
              console.error('error', error);
           });
      }))
   }

   insertRecords()
      .then(data => console.log('data', data))
      .catch(err => console.log('err', err))

}).catch((err) => {
    console.error(err);
    session.close();
});

При выполнении я получаю следующую ошибку.

{серьезность: 0, код: 5015, sqlState: 'HY000', msg: 'Слишком много аргументов'}}

1 Ответ

1 голос
/ 28 мая 2019

В вашем Promise.all вы map на records, но ваша функция распознавателя ничего не возвращает. Вам нужно будет вернуть обещание. Для этого вам следует просто заменить свой блок session.sql следующим: return session.sql(query).bind([util.name, util.age]).execute().

Это вернуло бы массив Promises в Promise.all, и это сработало бы. Обработка ошибок уже выполняется, когда вы вызываете функцию insertRecords, поэтому вам не нужно беспокоиться об этом в своем преобразователе.

...