首页 > 解决方案 > 承诺的价值问题 Promise { value }

问题描述

我正在导出一个函数,它在 mysql 中返回查询的值,当我执行 Json 的路径并且我从函数分配的值显示为 Promise {value}(例如 Promise {61})时,我不知道如何确定承诺的价值。

查询.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);

不知道怎么解决,谢谢

标签: javascriptnode.jspromisemysql2

解决方案


您的函数“vertodo”返回一个承诺。您需要等待 promise 用查询响应数据解决。最简单的方法是使用 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

    }
}

推荐阅读