Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 promise.then()中的setState(以及其他所有函数)未定义_Javascript_Firebase_Firebase Realtime Database_Ecmascript 6_Promise - Fatal编程技术网

Javascript promise.then()中的setState(以及其他所有函数)未定义

Javascript promise.then()中的setState(以及其他所有函数)未定义,javascript,firebase,firebase-realtime-database,ecmascript-6,promise,Javascript,Firebase,Firebase Realtime Database,Ecmascript 6,Promise,我正在使用从Firebase获取的数据创建React应用程序 当我使用下面的函数删除记录时,我会尝试重新加载页面,以获得不包含已删除记录的更新视图 deleteWorkout(id, e) { e.preventDefault(); fire.database().ref("athlete") .child(id).remove() // <-- This works // This does not work! //Error: '_this4.getAthl

我正在使用从Firebase获取的数据创建React应用程序

当我使用下面的函数删除记录时,我会尝试重新加载页面,以获得不包含已删除记录的更新视图

deleteWorkout(id, e) {
  e.preventDefault();
  fire.database().ref("athlete")
    .child(id).remove() // <-- This works

  // This does not work! 
  //Error: '_this4.getAthleteData' is undefined) 
  .then(() => this.getAthleteData().bind(this)) 
  .catch(e => console.log(e));
打电话

this.setState({...})

也返回相同的错误。

您的函数似乎没有使用bind或fat arrow(=>)绑定到上下文。

您的函数似乎没有使用bind或fat arrow(=>)绑定到上下文。

您不认为应该这样调用getAthleteData()吗。getAthleteData()

删除训练(id,e){
e、 预防默认值();
fire.database().ref(“运动员”)
.child(id).remove()//this.getAthleteData())//而不是getAthleteData()
.catch(e=>console.log(e));
}

我可能错了

你不认为应该这样调用getAthleteData().getAthleteData()吗

删除训练(id,e){
e、 预防默认值();
fire.database().ref(“运动员”)
.child(id).remove()//this.getAthleteData())//而不是getAthleteData()
.catch(e=>console.log(e));
}

我可能错了

有几个问题

1) 如果要调用类的函数,应使用此关键字

2) 要能够调用此函数,必须将函数绑定到正确的位置。要解决这个问题,有几种方法

  • 您可以使用如下所示的箭头函数,它将自动绑定其父对象
  • 您可以在构造函数中绑定此方法,并使用以下命令覆盖您自己的方法:
    this.deleteOutwork=this.deleteOutwork.bind(this)
  • 在调用函数时,您可以向它提供这个<代码>(this.deleteWorkout.bind(this))()。如果您只需要提供onClick事件的函数句柄,例如按钮,则可以提供
    this.deleteOutwork.bind(this)
  • 最后,下面显示的代码应该可以工作

    deleteWorkout = (id, e) => {
      e.preventDefault();
      fire.database().ref("athlete")
        .child(id).remove();
      .then(() => this.getAthleteData()) 
      .catch(e => console.log(e));
    }
    

    有几个问题

    1) 如果要调用类的函数,应使用此关键字

    2) 要能够调用此函数,必须将函数绑定到正确的位置。要解决这个问题,有几种方法

  • 您可以使用如下所示的箭头函数,它将自动绑定其父对象
  • 您可以在构造函数中绑定此方法,并使用以下命令覆盖您自己的方法:
    this.deleteOutwork=this.deleteOutwork.bind(this)
  • 在调用函数时,您可以向它提供这个<代码>(this.deleteWorkout.bind(this))()。如果您只需要提供onClick事件的函数句柄,例如按钮,则可以提供
    this.deleteOutwork.bind(this)
  • 最后,下面显示的代码应该可以工作

    deleteWorkout = (id, e) => {
      e.preventDefault();
      fire.database().ref("athlete")
        .child(id).remove();
      .then(() => this.getAthleteData()) 
      .catch(e => console.log(e));
    }
    

    您在哪里定义了此函数?您需要绑定
    deleteWorkout
    function是的,很抱歉,它已经绑定了它(在构造函数和内联中都尝试过,就像在编辑后的问题中一样)。。。getAthleteData()函数与DeleteOutwork()在同一个组件中定义。您在哪里定义此函数?您需要绑定
    DeleteOutwork
    function是的,很抱歉,它已经绑定了它(在构造函数和内联中都尝试过,就像在编辑后的问题中一样)。。。getAthleteData()函数与我知道的deleteWorkout()在同一个组件中定义。。。我试着用self=这个绑定它;我尝试在构造函数this.getAthleteData=this.getAthleteData.bind(this)和内联中绑定它,如示例中所示。。。所有的结果都是一样的,我知道。。。我试着用self=这个绑定它;我尝试在构造函数this.getAthleteData=this.getAthleteData.bind(this)和内联中绑定它,如示例中所示。。。所有这些都会产生相同的错误你是对的。。。我会纠正它,但它仍然不起作用。。。我会纠正它,但它仍然不起作用:/Ahhh。。。我没有绑定deleteWorkout函数,只有getAthleteData()函数。谢谢你,伙计!啊。。。我没有绑定deleteWorkout函数,只有getAthleteData()函数。谢谢你,伙计!
    deleteWorkout = (id, e) => {
      e.preventDefault();
      fire.database().ref("athlete")
        .child(id).remove();
      .then(() => this.getAthleteData()) 
      .catch(e => console.log(e));
    }