Javascript 如何从自定义函数内部调用vue路由器

Javascript 如何从自定义函数内部调用vue路由器,javascript,vue.js,router,Javascript,Vue.js,Router,我使用VueCLI,并且在方法中有这样的代码: submitCheck: function () { function authUser() { // returns a promise } function uploadFile() { // also returns a promise } // ... if ( error !== null ) { EventBus.$emit('showError', error) } else { authUser()

我使用VueCLI,并且在方法中有这样的代码:

submitCheck: function () {
function authUser() {
  // returns a promise   
}
function uploadFile() {
  // also returns a promise
}

// ...

if ( error !== null ) {
    EventBus.$emit('showError', error)
} else {
    authUser()
        .then(
            function () {
                return uploadFile();
            })
        .then(
            function (data) {
                EventBus.$emit('loaderStop')
                this.$router.push('/awaiting');
        })
        .catch(function(error) {
            EventBus.$emit('loaderStop')
                console.log(error)
        })
}
我想实现的是,如果所有承诺都已解决,则路由到/等待,但由于我在匿名函数中使用了此功能,所以它没有路由器。我相信很多程序员都遇到了这样的问题,需要从函数内部进行路由。怎么做


Kalreg.

要处理这个问题,我建议您使用箭头函数,并了解它们与其他函数样式的区别

要明确的是: 替换


要处理这个问题有多种方法,我建议您使用箭头函数,并了解它们与其他函数样式的区别

要明确的是: 替换


你的问题背景不够清楚。如果代码是以指数方法执行的,则可以使用箭头函数,如
(agrs,…=>{…}
。否则,如果不是这样,您可以使用like
(function(){}).bind(this)
。或者在代码模块中导入$router


希望这能对您有所帮助。

您的问题上下文不够清楚。如果代码是以指数方法执行的,则可以使用箭头函数,如
(agrs,…=>{…}
。否则,如果不是这样,您可以使用like
(function(){}).bind(this)
。或者在代码模块中导入$router


希望这能对您有所帮助。

Sandro和Xhua的答案非常完美。我只是想解释一下,为什么会出现错误:


问题是“这个”。它引用父对象。因此,在您的示例中,“this.”指的是authUser对象,而不是Vue。为了便于理解,您可以在authUser对象外部定义
“var that=this”
,然后在内部使用“
that.
”。或者,您可以选择更复杂的解决方案。

Sandro和Xhua的答案非常完美。我只是想解释一下,为什么会出现错误:


问题是“这个”。它引用父对象。因此,在您的示例中,“this.”指的是authUser对象,而不是Vue。为了便于理解,您可以在authUser对象外部定义
“var that=this”
,然后在内部使用“
that.
”。或者你选择更复杂的解决方案。

这个解决方案实际上对我很有效。我认为胖箭头只是缩短了代码,并没有改变这个的引用。。啊。。人们一生都在学习。这个解决方案实际上对我很有效。我认为胖箭头只是缩短了代码,并没有改变这个的引用。。啊。。人们一生都在学习。这并不完全正确,
这个
的价值取决于函数的调用方式,调用不会在这里发生。好吧,但是调用发生在promiseno的“then”函数中,这是定义,当承诺解决时,该函数会被系统调用
函数内部将是窗口或未定义的。不完全正确,
的值取决于函数的调用方式,调用不会在此处发生。但是调用发生在promiseno的“then”函数中,这是定义,当承诺解析时,系统将调用该函数<代码>该函数内部将是窗口或未定义的。
function (data) {
    EventBus.$emit('loaderStop')
    this.$router.push('/awaiting');
}
data => {
    EventBus.$emit('loaderStop');
    this.$router.push('/awaiting');
}