javascript - 如何在用作参数的函数中设置 Javascript 中的局部变量?

标签 javascript cordova barcode-scanner

我在 Android 应用程序中使用适用于 Phonegap 的 Barcodescannerplugin 时遇到了 Javascript 问题。

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

这就是为什么我试图让该界面更简单,我只需要调用一个方法 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 找到

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

最佳答案

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

关于javascript - 如何在用作参数的函数中设置 Javascript 中的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121332/

相关文章:

javascript - react-redux/react-router 连接和 withRouter 函数的 ownProps 参数的 PropTypes?

javascript - on() Javascript 中的多个子选择器

javascript - Angular - 从服务重新填充表单输入

jquery - Phonegap + jQuery Mobile + 股票/折线图

android - 无法在 barcode_scanner flutter 中找到明确的 Activity 类

对字符串数组进行排序的 JavaScript 函数在数组长度为 10 后表现得很奇怪

android - 混合应用程序中的下拉列表在某些 Android 设备上的灰色背景上有黑色文本

cordova - 如何在phonegap中播放swf文件?

OSX 的 Python evdev 等价物

android - 如何判断输入的是扫码器还是软键盘?