BarcodeScanner插件使用过程中遇到的奇葩问题

做ionic项目,使用BarcodeScanner插件扫二维码遇到的奇葩问题:在Android机上运行时,经常偶尔抽风,会调用两次扫码,然后取消扫码,但是在ios上运行时还比较正常

$scope.scanQrCode = function() {
  $cordovaBarcodeScanner
    .scan()
    .then(function(barcodeData) {
        if ( barcodeData.cancelled ){
          alert("二维码扫码取消");
        }else{
          var tradeQrCode = barcodeData.text;
          if ( (/\d{16};\d{4}/g).test(tradeQrCode) ){
            alert("扫码成功"+tradeQrCode.split(";")[0]);
          }else{
            $ionicPopup.alert({
              title:"失败",
              template:"二维码信息有误:"+tradeQrCode+",请重新扫描。",
              okText: '确定', // String (默认: 'OK')。OK按钮的文字。
              okType: 'item-customer-bg-darkred', // String (默认: 'button-positive')。OK按钮的类型。
            });
          }
        }

    }, function(error) {
      $ionicPopup.alert({
        title:"失败",
        template:"扫描二维码不成功。",
        okText: '确定', // String (默认: 'OK')。OK按钮的文字。
        okType: 'item-customer-bg-darkred' // String (默认: 'button-positive')。OK按钮的类型。
      });
    });


于是我用笨办法,在扫码结束后立即alert一些信息,这样就正常了

......
.then(function(barcodeData) {
        alert("扫码完毕");
        if ( barcodeData.cancelled ){
......

我就怀疑是不是在then()里面,barcodeData的数据不是一开始就有的,可能会存在一个延时,然后又修改代码,在then()里面加了一个$timeout 500毫秒,问题解决了。

$scope.scanQrCode = function() {
  $cordovaBarcodeScanner
    .scan()
    .then(function(barcodeData) {
      $timeout(funcion(){
        if ( barcodeData.cancelled ){
          alert("二维码扫码取消");
        }else{
          var tradeQrCode = barcodeData.text;
          if ( (/\d{16};\d{4}/g).test(tradeQrCode) ){
            alert("扫码成功"+tradeQrCode.split(";")[0]);
          }else{
            $ionicPopup.alert({
              title:"失败",
              template:"二维码信息有误:"+tradeQrCode+",请重新扫描。",
              okText: '确定', // String (默认: 'OK')。OK按钮的文字。
              okType: 'item-customer-bg-darkred', // String (默认: 'button-positive')。OK按钮的类型。
            });
          }
        }
      }, 500);
    }, function(error) {
      $ionicPopup.alert({
        title:"失败",
        template:"扫描二维码不成功。",
        okText: '确定', // String (默认: 'OK')。OK按钮的文字。
        okType: 'item-customer-bg-darkred' // String (默认: 'button-positive')。OK按钮的类型。
      });
    });

不知道这是不是BarcodeScanner插件的bug,就因为这个问题,害我在我们测试小妹面前尴尬了一整天,太耻辱了,过几天研究一下插件的源码。

你可能感兴趣的:(小怪兽)