Javascript TypeError:无法读取属性';id';未定义&;错误的变量日志
我有两个问题:我试图在代码中插入Promise.all,异步数据库调用需要Promise.all 第一个问题是,通过使用我将在下面发布的代码(代码A),当我记录“idArticolo”变量时,在控制台中,结果是“getIdArticolo()”函数的所有代码(我的意思是它只将我记录在要执行的书面代码中,而不是我想要的变量值中),也许我不必使用getIdArticolo函数,而是一个变量 我尝试使用变量Javascript TypeError:无法读取属性';id';未定义&;错误的变量日志,javascript,es6-promise,Javascript,Es6 Promise,我有两个问题:我试图在代码中插入Promise.all,异步数据库调用需要Promise.all 第一个问题是,通过使用我将在下面发布的代码(代码A),当我记录“idArticolo”变量时,在控制台中,结果是“getIdArticolo()”函数的所有代码(我的意思是它只将我记录在要执行的书面代码中,而不是我想要的变量值中),也许我不必使用getIdArticolo函数,而是一个变量 我尝试使用变量var getIdArticolo=newpromise(代码B),但它给了我另一个错误: “T
var getIdArticolo=newpromise
(代码B),但它给了我另一个错误:
“TypeError:无法读取未定义的属性'id',引用代码“resolve(result[0].id);”,“result”未定义
为什么?
实际上,它是完全相同的代码,除了一个在一个函数中,另一个是变量赋值。显然,我使用A代码或B代码,对我不想执行的代码进行注释
所有代码:
var mysql = require('mysql')
var http = require('http')
var url = require('url');
var express = require("express");
var cors = require('cors')
var app = express();
var sql = "";
var connection = mysql.createConnection({
host: '127.0.0.1',
user: 'andrea',
password: 'password',
database: 'spesa'
});
connection.connect();
function LinkMysql() {
var data = '';
return new Promise(function(resolve,reject) {
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result);
});
});
}
var idArticolo;
var idCategoria;
var nuovoId;
var articolo, costo, quantita, negozio, data;
app.use(cors());
app.get('/inserisciDati',function(request, response){
console.log("/inserisciDati");
/*
console.log("/inserisciDati");
console.log("articolo="+request.query.articolo);
console.log("costo="+request.query.costo);
console.log("quantita="+request.query.quantita);
console.log("negozio="+request.query.negozio);
console.log("data="+request.query.data);
*/
articolo = request.query.articolo;
costo = request.query.costo;
quantita = request.query.quantita;
negozio = request.query.negozio;
data = request.query.data;
//INSERIRE RISPOSTA ALLA PAGINA HTML CON ERRORE SE C'È
//recuperare gli id dell' articolo e del negozio, l' id categoria dell'articolo e il nuovo id del registro
getValues();
//INSERIRE I DATI IN TABLLA MYSQL
});
function getValues(){
Promise.all([getIdArticolo, getIdCategoria, getLastId]).then(function(values){
idArticolo = values[0];
idCategoria = values[1];
nuovoId = values[2];
console.log("idArticolo="+idArticolo);
sql="INSERT INTO registro VALUES ('" + nuovoId + "','" + articolo + "','" + idCategoria +
"','" + idArticolo + "','" + costo + "','" + quantita +
"','" + negozio + "','" + data + "')";
//console.log("sql="+sql);
});
}
var getIdArticolo = new Promise(function(resolve, reject){
sql = "SELECT id FROM articoli WHERE articolo = '" + articolo + "'";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id);
});
});
function getIdArticolo(){
return new Promise(function(resolve,reject) {
sql = "SELECT id FROM articoli WHERE articolo = '" + articolo + "'";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id);
});
});
}
function getIdCategoria(){
return new Promise(function(resolve, reject){
sql = "SELECT id_categoria FROM articoli WHERE articolo = '" + articolo + "'";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id_categoria);
});
});
}
function getLastId(){
return new Promise(function(resolve, reject){
sql = "SELECT id FROM registro ORDER BY id DESC LIMIT 1";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id);
});
});
}
app.get('/getArticoli', function(request, response){
console.log("/getArticoli");
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
response.setHeader("X-Powered-By",' 3.2.1');
response.setHeader("Content-Type", "application/json");
sql = 'SELECT articolo FROM articoli ORDER BY articolo ASC';
LinkMysql().then(function(val) {
response.writeHead(200, {'content-Type': 'text/plain; charset=utf-8'});
response.end(JSON.stringify(val));
});
});
app.get('/getNegozi', function(request, response){
console.log("/getNegozi");
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
response.setHeader("X-Powered-By",' 3.2.1');
response.setHeader("Content-Type", "application/json");
sql = 'SELECT negozio FROM negozi ORDER BY negozio ASC';
LinkMysql().then(function(val) {
response.writeHead(200, {'content-Type': 'text/plain; charset=utf-8'});
response.end(JSON.stringify(val));
});
});
app.listen(8080);
代码A摘录:
function getIdArticolo(){
return new Promise(function(resolve,reject) {
sql = "SELECT id FROM articoli WHERE articolo = '" + articolo + "'";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id);
});
});
}
代码B摘录:
var getIdArticolo = new Promise(function(resolve, reject){
sql = "SELECT id FROM articoli WHERE articolo = '" + articolo + "'";
connection.query(sql, function(err, result) {
if(err)
console.log("error: " + err);
resolve(result[0].id);
});
});
谢谢 这两种方法似乎都存在一些问题: 看起来您忘记调用返回承诺的函数了 例如:代码A是
getIdArticolo
,必须调用getIdArticolo()
,以返回可以在promise.all语句内部等待的承诺
Promise.all([getIdArticolo(), getIdCategoria()]).then(result => {
});
另外,请记住,当在var getIdArticolo=new Promise()
中将某事物声明为变量时,变量声明为 粘贴这么多代码没有多大帮助,请将其缩小到核心问题Promise.all([getIdArticolo()])。然后(values=>(idArticolo=values[0])
应该与代码B一起工作(注意函数调用而不是变量)。“result”的输出是“谢谢您的解决方案是解析的!”!使用()编写的代码可以很好地工作!谢谢!感谢您的回复,您的解决方案作为A1rPun工作良好!我没想到会被吊起来。好吧!