2

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 / 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 に答える