如何在我用作参数的函数中设置Javascript中的本地变量

How can i set a local Variable in Javascript in a function i used as parameter?

本文关键字:Javascript 设置 变量 函数 参数      更新时间:2023-09-26

我在Android应用程序中使用Phonegap的Barcodescannerplugin的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/BackodeScanner

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

原因是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;

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

对于所有其他也有这些问题的人来说,解决方案看起来是这样的:

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);
    });
}

我已经更改了错误代码,并以这种方式取消了,我总是得到一个空字符串来处理。对我来说,更多的错误处理是没有用的。

问候,Marcus