javascript - 承诺的价值问题 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);
不知道怎么解决,谢谢
解决方案
您的函数“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
}
}
推荐阅读
- javascript - 用于切换复选框的 Javascript - Laravel
- python - 回溯如何在 Python 中工作
- encoding - User-Token 是哪个解码/解密算法?
- amazon-web-services - 如何在 aws CloudFront 上使用 registrars(strato.de) 电子邮件服务器和托管网站?
- jenkins - 以 XML 格式将 Jacoco 的覆盖率报告导出到 Jenkins
- python - 如何在 Python 中绘制平均 ROC 和 AUC?
- routing - 路由模式匹配未从多个路由调用
- ansible - ansible 创建本地目录(主)
- flutter - Flutter:带有表情符号的 TextField 无法正常工作
- android - 如何获取 JSON 数组的正确 URL