2

我在 Android 应用程序中使用 Barcodescannerplugin for Phonegap 在 Javascript 中遇到问题。

我使用的插件带来了一个小的 Javascript,以便在我的 Phongap 应用程序中使用 Barcodescanner。但在我看来,提供的 javascript 函数的接口并不是那么理想,因为我不想在使用这些方法的每个位置都进行错误处理。

这就是为什么我试图使该界面更简单的原因,我只需要调用一个方法scanBarcode(),并且调用脚本将从扫描的文本中获取文本,或者如果出现故障,则什么也不获取。这是代码:

function scanBarcode(){
    var resultText = '';
    window.plugins.barcodeScanner.scan( 
        function(result) {
            if (!result.cancelled){
                resultText = result.text;
            }
        },
        function(error) {
            alert("Scanning failed: " + error);
        }
    );
    return resultText;
}

我使用的插件可以在:Github Phonegap Plugins Android/BarcodeScanner

我的方法的结果总是一样的,一个空字符串。我认为原因是变量范围,但我不知道如何解决这个问题。

4

2 回答 2

3

原因是该window.plugins.barcodeScanner.scan方法是异步执行的——直到方法返回成功回调才被调用。

我建议Promise从您的方法中返回一个对象,例如(以 jQuery 为例):

var result = $.Deferred();
window.plugins.barcodeScanner.scan( 
    function(result) {
        if (!result.cancelled){
            result.resolve(result.text);
        }
    },
    function(error) {
        result.reject(error);
    }
);

return result;
于 2012-08-25T10:55:33.623 回答
1

感谢您的帮助,现在可以了:)

对于所有其他也遇到这些问题的人,解决方案如下所示:

function scanBarcode(){
    var resultObject = $.Deferred();
    window.plugins.barcodeScanner.scan(
        function(result) {
            if (!result.cancelled){
                resultObject.resolve(result.text);
            } else {
                resultObject.resolve('');
            }
        },
        function(error) {
            resultObject.resolve('');
        }
    );
    return resultObject;
}

现在只需这么说就很容易获得扫描值:

function clickScanBarcode(){
    var result = scanBarcode();
    result.done( function(text){
        alert('Barcodetext:'+text);
    });
}

我已经更改了错误代码并取消了,我总是得到一个空字符串来处理。在我的情况下,更多的错误处理没有用。

问候,马库斯

于 2012-08-26T08:27:39.333 回答