Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法读取属性';id';未定义&;错误的变量日志_Javascript_Es6 Promise - Fatal编程技术网

Javascript TypeError:无法读取属性';id';未定义&;错误的变量日志

Javascript TypeError:无法读取属性';id';未定义&;错误的变量日志,javascript,es6-promise,Javascript,Es6 Promise,我有两个问题:我试图在代码中插入Promise.all,异步数据库调用需要Promise.all 第一个问题是,通过使用我将在下面发布的代码(代码A),当我记录“idArticolo”变量时,在控制台中,结果是“getIdArticolo()”函数的所有代码(我的意思是它只将我记录在要执行的书面代码中,而不是我想要的变量值中),也许我不必使用getIdArticolo函数,而是一个变量 我尝试使用变量var getIdArticolo=newpromise(代码B),但它给了我另一个错误: “T

我有两个问题:我试图在代码中插入Promise.all,异步数据库调用需要Promise.all

第一个问题是,通过使用我将在下面发布的代码(代码A),当我记录“idArticolo”变量时,在控制台中,结果是“getIdArticolo()”函数的所有代码(我的意思是它只将我记录在要执行的书面代码中,而不是我想要的变量值中),也许我不必使用getIdArticolo函数,而是一个变量

我尝试使用变量
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工作良好!我没想到会被吊起来。好吧!