在promise上使用apply()并且无法访问promise响应数据

时间:2017-10-13 20:30:38

标签: javascript es6-promise axios

我在一个返回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但不包含从服务器发回的数据?这样做的正确方法是什么?

1 个答案:

答案 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));
}