проблемы со значениями обещания Promise {value} - PullRequest
0 голосов
/ 22 ноября 2018

Я экспортирую функцию, где она возвращает значение запроса в mysql, когда я делаю путь Json, и значения, которые я назначаю из функции, отображаются как Promise {value} (пример Promise {61})и я не знаю, как исправить значение обещания.

query.js

  const mysql = require('mysql2/promise');

  const vertodo = async function(req){
    const connection = await mysql.createConnection({
      host: '192.168.0.222',
      port: 3306,
      user: 'root',
      database: 'project',
      password : '123456789'
    });
    return  [rows, fields] = await connection.query('Select COUNT(*) total from table1 where id=' +req.id);  
    connection.end();
  }
  module.exports.vertodo = vertodo;

index.js

const  data_mysql  = require("./query")

// value jsonObj
// [{ id: 1,
//   name: 'XTRA',
//   proceso: 0
// },
//  { id: 2,
//   name: 'Maq',
//   proceso: 0
// }]

for (var i = 0; i < jsonObj.length; i++) {
  //jsonObj[i].proceso = 0;  
  jsonObj[i].procesa = data_mysql.vertodo(jsonObj[i]).then( rows =>{
    return rows[0][0].total
  })
  // jsonObj[i].proceso = Promise { 61 } , Promise { 33 };  

}
setTimeout(function(){
   for (var i = 0; i < jsonObj.length; i++) {
     console.log(jsonObj[i].procesa); // Promise { 61}, Promise { 33 }
   }
 }, 3000);

Не знаю, как мне это решить, спасибо

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Я не совсем понимаю, что вы хотите сделать, но я предполагаю, что вы хотите выполнить эти запросы в цикле и подождать, пока все не завершатся, а затем записать результаты.

Если эти запросы необходимо выполнитьв последовательности.

async function runQueries() {
    for (const item of jsonObj) {
        item.procesa = await data_mysql.vertodo(item);
    }
}

runQueries.then(function () {
    jsonObj.forEach(function (item) {
        console.log(item.procesa);
    });
});
0 голосов
/ 22 ноября 2018

Ваша функция "vertodo" возвращает обещание.Вам нужно дождаться разрешения обещания с данными ответа на запрос.Самый простой способ сделать это - использовать синтаксис async / await.См. Ниже.

index.js

const  data_mysql  = require("./query")

runQuery()
async function runQuery() {
    for (var i = 0; i < jsonObj.length; i++) {
        //jsonObj[i].proceso = 0;  
        queryResponse = await data_mysql.vertodo(jsonObj[i])
        // process queryResponse

    }
}
...