在Vue组件中:
import { someRequestMethod } from '@/api/requ'
...
methods: {
testMethod() {
someRequestMethod(someRequestData).then(function() {
this.outMethod_01()
}).then(function() {
this.outMethod_02()
})
}
outMethod_01() {
console.log('I am an outer method 01.');
}
outMethod_02() {
console.log('I am an outer method 02.');
}
}
当我致电testMethod
并回复Promise
时。
那么如果成功,我想致电outMethod_01
,如果遇到错误,请致电outMethod_02
。
但出现错误outMethod_01 is undefined
和outMethod_02 is undefined
。
那么如何在Promise
中调用外部方法?
答案 0 :(得分:2)
您应该使用箭头函数语法(params) => {...code}
而不是function(params) {...code}
。箭头函数this
从作用域继承。在常规函数中,this
是函数本身(它具有自己的作用域)。
您可以在此处了解更多信息:https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4
如果您不能使用ES6语法,则可以执行以下操作:
methods: {
testMethod() {
var self = this;
someRequestMethod(someRequestData).then(function() {
self.outMethod_01()
}).then(function() {
self.outMethod_02()
})
}
outMethod_01() {
console.log('I am an outer method 01.');
}
outMethod_02() {
console.log('I am an outer method 02.');
}
}
答案 1 :(得分:1)
您可以使用bind()
而不是将调用包装在匿名函数中,而不用一箭打中两只鸟:
someRequestMethod(someRequestData)
.then(this.outMethod_01.bind(this))
.then(this.outMethod_02.bind(this))
答案 2 :(得分:0)
testMethod() {
someRequestMethod(someRequestData).then(() => {
this.outMethod_01()
}).then(function() {
this.outMethod_02()
})
}
这有效。