Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
412 views
in Technique[技术] by (71.8m points)

javascript - 传递调用结果时出现异常:TypeError:不是流星中的函数(Exception in delivering result of invoking : TypeError: is not a function in meteor)

When I added in onSuccessCreateClass into meteor.call callback and this error come up.

(当我将onSuccessCreateClass添加到meteor.call回调中时,出现此错误。)

dont know what is wrong here?

(不知道这是怎么回事?)

Exception in delivering result of invoking 'createClass': TypeError: this.onSuccessCreateClass is not a function at http://localhost:3000/app/client/components/MyClasses.jsx?044c7b228d4b33fcea4b9f3c05da6d82e5e6c8b7:37:11 at null._callback ( http://localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:999:22 ) at _.extend._maybeInvokeCallback ( http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:3500:12 ) at .extend.dataVisible ( http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:3529:10 ) at http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:4365:7 at Array.forEach (native) at Function.

(传递调用'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?250b63e6c919c5383a0511ee4efbf42bb707 at 600: Array Function的forEach(本机)。)

.each._.forEach ( http://localhost:3000/packages/underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:11 ) at _.extend._runAfterUpdateCallbacks ( http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:4364:7 ) at _.extend._livedata_data ( http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:4354:10 ) at onMessage ( http://localhost:3000/packages/ddp-client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:3361:12 )

(.each ._。forEach( http:// localhost:3000 / packages / underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:11 )位于_.extend._runAfterUpdateCallbacks( http:// localhost:3000 / packages / ddp-client.js? 250b63e6c919c5383a0511ee4efbf42bb70a650f:4364:7在_.extend._livedata_data)( HTTP://本地主机:3000 /包/ DDP-client.js 250b63e6c919c5383a0511ee4efbf42bb70a650f:4354:10 )在的onMessage( HTTP://本地主机:3000 /包/ ddp- client.js?250b63e6c919c5383a0511ee4efbf42bb70a650f:3361: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()
            }
        })
    }
},
  ask by phongyewtong translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should set this for callback in Meteor.call , because now this refers to the global scope or undefined if you are using strict mode .

(您应该设置this在回调Meteor.call ,因为现在this指的是全球范围或undefined ,如果你使用的是strict mode 。)

In JavaScript, there is method .bind which allows set this for method

(在JavaScript中,方法.bind允许为方法设置this值)

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

--

(-)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...