异步功能不执行 - Expo React Native

时间:2018-04-04 16:04:30

标签: reactjs asynchronous native expo

我开发了一个运行良好的应用程序,直到我在Expo上重新加载一次应用程序。我不明白为什么没有执行takePicture函数: 在控制台中,我可以看到STEP 0,STEP 1,但不是STEP 2 ...

   <TouchableOpacity
        style={{
          alignSelf: 'center',
          height: 70,
          width: 70,
          borderRadius: 35,
          backgroundColor: colour.primary,
          borderColor: '#fff',
          borderWidth: 3
        }}
        onPress={() => {
          console.log('STEP 0');
          this.takePicture.bind(this);
          console.log('STEP 1');
          this.setState({pictureTook: true});
        }}
      >
        <Text style={sty.flipText}></Text>
      </TouchableOpacity>  




 takePicture = async function() {
      console.log('STEP 2');
    if (this.camera) {
      console.log('STEP 3');
      this.camera.takePictureAsync({base64: true}).then(data => {
        FileSystem.moveAsync({
          from: data.uri,
          to: `${FileSystem.documentDirectory}photos/IdCard.jpg`,
        }).then(() => {

            Vibration.vibrate();
          });
      });
    }
  };

我注意到我使用异步功能和AsyncStorage模块重新加载了很多时间。这可能是问题吗?

1 个答案:

答案 0 :(得分:0)

您正在为onPress的{​​{1}}方法声明匿名函数,

TouchableOpacity

在其中,您绑定了() => { console.log('STEP 0'); this.takePicture.bind(this); console.log('STEP 1'); this.setState({pictureTook: true}); } 的{​​{1}}上下文,如下所示:this。你永远不会调用this.takePicture