簡體   English   中英

如何在用作參數的函數中使用Javascript設置局部變量?

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

我在使用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插件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;

感謝您的幫助,現在它可以工作了:)

對於所有其他也遇到這些問題的人,解決方案如下所示:

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

我已經更改了錯誤代碼並以某種方式取消了,因為我總是得到一個空字符串來處理。 在我的情況下,更多的錯誤處理沒有用。

問候,馬庫斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM