我在一个返回promise的函数上调用apply方法,并且在调用apply方法之后我遇到了获取响应数据的问题。
getData(data) {
axios.post('/post/something', data)
.then(res => console.log(res)); // Returns 'Success'
}
callService(args, fn) {
return fn.apply(this, args)
.then(() => this.doSomethingElse())
.then(res => console.log(res)); // Returns undefined
}
callService([1,2], getData);
为什么fn.apply包含一个promise但不包含从服务器发回的数据?这样做的正确方法是什么?
答案 0 :(得分:1)
为什么fn.apply包含一个promise但不包含从服务器发回的数据?
callService
会返回一个承诺,该承诺会解析为this.doSomethingElse()
的返回值,显然为undefined
。这是您链接.then
电话时发生的情况。 .then
返回的promise将解析为传递给它的函数的返回值。 You can learn more about promises on MDN
这样做的正确方法是什么?
我想你想要这个:
callService(args, fn) {
return fn.apply(this, args)
.then(res => {
this.doSomethingElse();
return res;
});
}
或者如果doSomethingElse
返回承诺:
callService(args, fn) {
return fn.apply(this, args)
.then(res => this.doSomethingElse().then(() => res));
}