Javascript 反应:“;这";在组件函数中未定义

Javascript 反应:“;这";在组件函数中未定义,javascript,node.js,reactjs,this,Javascript,Node.js,Reactjs,This,我想调用self.setState({date\u data:tour\u dates})。所以我有一个嵌套函数,而且似乎在每个块上使用.bind(这个)似乎都不能解决我的问题。我错过了什么?我应该如何改变我的编码风格来避免这样的问题 var mysql = require('mysql'); var async = require('async'); var self = this; var moment = require('moment'); class ArtistTable ex

我想调用self.setState({date\u data:tour\u dates})。所以我有一个嵌套函数,而且似乎在每个块上使用.bind(这个)似乎都不能解决我的问题。我错过了什么?我应该如何改变我的编码风格来避免这样的问题

var mysql = require('mysql');

var async = require('async');

var self = this;
var moment = require('moment');

class ArtistTable extends React.Component {
  constructor(props, context) {
    super(props, context);
    this.getArtistData = this.getArtistData.bind(this);
    this.state = {
      open: false,
      date_data: [],
    };
  }

  getArtistData (artistName) {

    var artist_id = -1;
    var tour_id = -1;
    var tour_dates = new Array();
    var connection = mysql.createConnection({
        host     : '127.0.0.1',
        user     : 'root',
        password : '',
        database : 'anand2'
    });

    connection.connect(function(err) {
        if (err) {
            console.error('MYSQL Error Connecting!' + err.stack);
            return;
        }
        console.log('MYSQL ArtistTable connected as ' + connection.threadId);
    });

    async.series([
        function(callback){
             connection.query("SELECT * FROM artist WHERE name = '" +artistName+"'" , function(err, rows){
                 artist_id = rows[0].id;
                 callback();
             });
         },  function(callback){
             //finde tour ID
             connection.query("SELECT * FROM tour WHERE artist = " + artist_id , function(err, rows){

                 console.log("SELECT * FROM tour WHERE artist = " + artist_id ) //Todo: neue erstellen
                 console.log(rows.length)
                 tour_id = rows[0].id;

                 console.log("Tour ID is " + tour_id)
                 callback();
            });
        }, function(callback){
            connection.query("SELECT dtime,location FROM tour_date WHERE tour="+ tour_id + " AND dtime >= CurDate() ORDER BY dtime ASC" , function(err, rows){
                if (rows.length > 0) {
                    for (var i = 0; i < rows.length; i++) {
                         tour_dates.push({date: rows[i].dtime, location:  rows[i].location });
                    }
                    console.log("Number of dates: " + tour_dates.length)
                    self.setState( { date_data: tour_dates});
                }
            }.bind(this));
        }
    ]);
  }
}
var mysql=require('mysql'); var async=require('async'); var self=这个; var力矩=要求的(‘力矩’); 类Artistable扩展了React.Component{ 构造函数(道具、上下文){ 超级(道具、背景); this.getArtistData=this.getArtistData.bind(this); 此.state={ 开:错, 数据日期:[], }; } getArtistData(artistName){ var\u id=-1; var-tour_id=-1; var tour_dates=新数组(); var connection=mysql.createConnection({ 主持人:“127.0.0.1”, 用户:'根', 密码:“”, 数据库:“anand2” }); connection.connect(函数(err){ 如果(错误){ console.error('MYSQL连接错误!'+err.stack); 返回; } log('MYSQL ArtistTable作为'+connection.threadId'连接); }); 异步系列([ 函数(回调){ connection.query(“从艺人中选择*,其中name=”+artistName+”,函数(err,行){ 艺术家id=行[0]。id; 回调(); }); },函数(回调){ //芬德旅游ID connection.query(“从艺术家所在的巡演中选择*”+艺术家id,函数(错误,行){ console.log(“从艺术家所在的巡演中选择*”=+artist_id)//Todo:neue erstellen console.log(rows.length) 巡更id=行[0]。id; console.log(“巡更ID为”+巡更ID) 回调(); }); },函数(回调){ connection.query(“按dtime ASC选择dtime,从tour\u date中选择位置,其中tour=“+tour\u id+”和dtime>=CurDate(),函数(err,行){ 如果(rows.length>0){ 对于(变量i=0;i
另外,请忽略“self=this”,这是一个测试,我确实尝试过它。

您需要将self=this放在getArtistData中的async.series之前