传递调用结果时出现异常:TypeError:不是流星中的函数

pho*_*ong 2 javascript meteor reactjs

当我将onSuccessCreateClass添加到meteor.call回调中时,出现此错误。不知道这是怎么回事?

传递调用'createClass'的结果时发生异常:TypeError:this.onSuccessCreateClass不是http:// localhost:3000 / app / client / components / MyClasses.jsx?044c7b228d4b33fcea4b9f3c05da6d82e5e6c8b7:37:11 处的函数。_callback(http: //localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:999:22)在_.extend._maybeInvokeCallback(HTTP://本地主机:3000 /包/ DDP-client.js 250b63e6c919c5383a0511ee4efbf42bb70a650f:3500:12)在.extend .dataVisible(http:// localhost:3000 / packages / ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:3529:10)at http:// localhost:3000 / packages / ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb707650:4365 在Array.forEach(本机)在功能处。.each ._。forEach(HTTP://本地主机:3000 /包/ underscore.js 46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:11在_.extend._runAfterUpdateCallbacks)(HTTP://本地主机:3000 /包/ DDP-client.js 250b63e6c919c5383a0511ee4efbf42bb70a650f:4364:7)在_.extend._livedata_data(http:// localhost:3000 / packages / ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:4354:10)位于onMessage(http:// localhost:3000 / packages / ddp-client.js?250b63e6c919c5383a0511ee4ef6503 :12

onSuccessCreateClass() {
    console.log("Successfully created New Class")
    $("#createClassModal").modal('hide')
    $('#createClassModal').on('hidden.bs.modal', function () {
        $(this).find('form').trigger('reset')
    })
},

onPressSubmit(e) {
    e.preventDefault()
    const className = e.target.cname.value
    console.log(this.props.courseId)
    console.log(className)
    if (Meteor.user().classes.length !== 0)
    {
        console.log("Got Class")
        Meteor.call("createClass", this.props.courseId, className, function(error) {
            if (error)
            {
                console.log(error.reason)
            }
            else
            {
                this.onSuccessCreateClass()
            }
        })
    }
    else
    {
        console.log("No Class")
        Meteor.call("createNewClass", this.props.courseId, className, function(error) {
            if (error)
            {
                console.log(error.reason)
            }
            else
            {
                this.onSuccessCreateClass()
            }
        })
    }
},
Run Code Online (Sandbox Code Playgroud)

Ale*_* T. 5

您应该设置thisin的回调Meteor.call,因为现在this是指全局范围,或者undefined您正在使用strict mode。在JavaScript中,有一种方法.bind可以设置this方法

Meteor.call("createClass", this.props.courseId, className, function(error) {
   if (error) {
     console.log(error.reason)
   } else {
     this.onSuccessCreateClass()
   }
}.bind(this))
Run Code Online (Sandbox Code Playgroud)

-

Meteor.call("createNewClass", this.props.courseId, className, function(error) {
  if (error) {
    console.log(error.reason)
  } else {
    this.onSuccessCreateClass()
  }
}.bind(this))
Run Code Online (Sandbox Code Playgroud)