在ES6 / React中使用Promise时,如何设置正确的'this'词法范围

时间:2017-01-18 08:58:02

标签: javascript reactjs ecmascript-6 es6-promise

我正在尝试使用FourSquare API在我的React App中返回位置信息。要做到这一点,我正在使用这个有用的包:https://www.npmjs.com/package/foursquarevenues

此包使用promises进行API调用。我的代码调用包如下。 API调用工作得很好,我可以记录响应 - 但是当我尝试设置状态时,它返回this.setState不是一个函数。我是ES6 Arrow函数的新手,但我尝试重写promise调用以使用新语法 - 因为我认为使用Arrow Functions会自动将此上下文绑定到父作用域。然而,这还没有解决问题。我究竟做错了什么?任何帮助表示赞赏!

foursquare.venues.getVenues(params)
          .then(function(venues) {
            const venueList = venues.response.venues
                console.log(venueList);
            this.setState({
              venues: venueList   // this returns this.setState is not a function
            })
            })
          .catch(err => {
            console.log(err);
          });

1 个答案:

答案 0 :(得分:0)

(arg1, arg2, arg3) => { this.doSomething(); }

该表示法创建一个自动从父this继承的函数。

另一种方法是将其保存在将继承的常量中。

const self = this;
function exemple() {
    self.doSomething();
}