未捕获的TypeError:无法读取属性' getSMS'为null

时间:2017-02-01 04:35:30

标签: javascript cordova typescript cordova-plugins

下面的代码是一个cordova android sms访问权限插件代码。它工作正常。

在我尝试调用我的this.getSMS()函数时,它正在通过错误

setTimeout(() => {
      this.holders.dissmissLoadingCustom();
      platform.ready().then(() => { 

      var permissions = cordova.plugins.permissions;

        permissions.hasPermission(permissions.READ_SMS, checkPermissionCallback, null);

        function checkPermissionCallback(status) {
          if(!status.hasPermission) {
            var errorCallback = () => {
              console.log("invoking the errorCallback");
              alert('READ_SMS permission is not turned on');
            }

            permissions.requestPermission(
              permissions.READ_SMS,
              (status) => {
                console.log("invoking status");

              if(!status.hasPermission) {
                console.log("invoke !status.hasPermission");
                errorCallback();
              }
              else{
                console.log("invoking else part !status.hasPermission");
                this.getSMS();//this line through error
              }
            },
            errorCallback);
          }
        }

      });

    }, 10000);
  

如果用户点按允许,那么我正在尝试拨打我的this.getSMS(),如上面的代码所示。   如果用户拒绝,那么我只是收到错误回调。

我不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

您已将checkPermissionCallback定义为常规功能。 this关键字指向该函数,而不是指定它的实际类。

setTimeout(() => {
      this.holders.dissmissLoadingCustom();
      platform.ready().then(() => { 

      var permissions = cordova.plugins.permissions;

        permissions.hasPermission(permissions.READ_SMS, (status)=>checkPermissionCallback(status), null);//use arrow to call

        function checkPermissionCallback(status) {
          if(!status.hasPermission) {
            var errorCallback = () => {
              console.log("invoking the errorCallback");
              alert('READ_SMS permission is not turned on');
            }

            permissions.requestPermission(
              permissions.READ_SMS,
              (status) => {
                console.log("invoking status");

              if(!status.hasPermission) {
                console.log("invoke !status.hasPermission");
                errorCallback();
              }
              else{
                console.log("invoking else part !status.hasPermission");
                this.getSMS();//this line through error
              }
            },
            errorCallback);
          }
        }

      });

    }, 10000);

或者您可以在功能定义之前将this保存到另一个变量或使用bind