Выберите обновленную строку сразу после обновления строки с помощью Promise.all()

#javascript #node.js

#javascript #node.js

Вопрос:

Моя цель — select немедленно использовать обновленную строку promise.all() . Я использую promise.all() , потому что я думаю, что как я могу обойти node.js асинхронный Строка обновляется успешно, но select оператор ничего не возвращает. Я работаю с базой данных mysql. Я буду признателен за любую помощь. Спасибо.

 const query = promisify(db.query.bind(db));
Promise.all( [query("UPDATE order_detail SET tracking_number = '2323211' where order_detail_id = 81")])
.then(() => query('select * from order_detail where order_detail_id = ?', [81]))
.then(data => {
   console.log(data);
})
  

Комментарии:

1. Зачем использовать Promise.all , если вы передаете только одно обещание?

2. @eol Я думал, что это будет для меня способом обойти асинхронный node.js . Я также открыт для предложений. Спасибо.

3. @NaheemOlaniyan что с обходом? Вы также можете синхронизировать весь асинхронный код (однако это будет намного медленнее)

4. @Zer0 Я подумал, что я не смогу получить данные сразу после вставки в node.js . Пожалуйста, у вас есть какой-нибудь лучший способ?

Ответ №1:

Вам нужно выполнить свои операции внутри then

 const query = promisify(db.query.bind(db));
Promise.all([query("UPDATE order_detail SET tracking_number = '2323211' where order_detail_id = 81")])
  .then(() => {
    query('select * from order_detail where order_detail_id = ?', [81]).then((data) => console.log(data))
  })
  

Комментарии:

1. @NaheemOlaniyan теперь это должно сработать. можете ли вы проверить?

2. Я пытаюсь что-то сделать внутри .then after console.log(data) , но получаю сообщение об ошибке. Пожалуйста, у вас есть какие-либо предложения по исправлению этого?

Ответ №2:

promiseAll() с .then и async await

используя .then :

 const query = promisify(db.query.bind(db));
Promise.all([query("UPDATE order_detail SET tracking_number = '2323211' where order_detail_id = 81")])
    .then(() => {
        query('select * from order_detail where order_detail_id = ?', [81])
          .then((data) => console.log(data));
    });
  

Используя async и await :

 const run = async () => {
    const query = promisify(db.query.bind(db));
    const resultArr = await Promise.all([query("UPDATE order_detail SET tracking_number = '2323211' where order_detail_id = 81")]);
    const result = await query('select * from order_detail where order_detail_id = ?', [81]);
}
run();