使用'这个' Firebase承诺使用React Native

时间:2016-11-18 20:47:43

标签: javascript firebase react-native es6-promise

我在Firebase.promise this回调中使用.then(时遇到问题。 这就是我所拥有的:

firebase.auth().signInWithEmailAndPassword(this.state.username,
         this.state.password).then(function (result) {
           console.log("AUTH OK " + result.provider + " " + result.uid);
           this.props.navigator.push('main_page'); // Can't do this.. or anything using ''this'

        }, (error) => {  // es6 syntax fat arrow syntax to ensure 'this' is in scope
        // Handle Errors here.
        var errorMessage = error.message;
        this.setState({errorMessage: errorMessage});

      }
    );

我知道ES 6胖箭头语法,但由于某种原因,不能使用相同的语法。

这似乎是其他人已经解决的问题,但无法找到任何相关信息。

2 个答案:

答案 0 :(得分:3)

您也可以使用bind解决此问题,如下所示:

  .then(function() { ... }.bind(this), 

答案 1 :(得分:3)

Javascripts this仅指当前函数的范围。如果您更改代码如下:

var scope = this;

firebase.auth().signInWithEmailAndPassword(scope.state.username, scope.state.password).then(function (result) {
    console.log("AUTH OK " + result.provider + " " + result.uid);
    scope.props.navigator.push('main_page'); // Can't do this.. or anything using ''this'
}, (error) => { // es6 syntax fat arrow syntax to ensure 'this' is in scope
    // Handle Errors here.
    var errorMessage = error.message;
    scope.setState({
        errorMessage : errorMessage
    });

});

它应该消除这个问题。