Не удается прочитать свойство undefined в классе - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в javascript, так может кто-нибудь помочь мне понять, почему этот код не работает?

У меня есть класс, и он вызывает функцию сканирования штрих-кода Cordova.У меня есть пример, который работает, однако я хочу иметь возможность отделить функцию (результат) и функцию (ошибка) и использовать onSuccess (результат) и onFailure (ошибка).

Понятия не имеюпочему это происходит, так что если кто-то может помочь, это было бы здорово.

РЕДАКТИРОВАТЬ: поэтому я обновил код на основе Stradosphere сказал, однако я все еще получаю результат не определены ошибки.

Полное сообщение об ошибке:

Uncaught ReferenceError: результат не определен в barcodeScanner.scanBarcode (barcodeScanner.js: 10) в HTMLButtonElement.myFunction (main.js: 18)

var me = this;
class barcodeScanner {
    constructor() {
        this._barcodeResult = 0;
    }

    scanBarcode() {
        //THIS THROWS result is not defined error 
        cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));

        //THIS WORKS
        cordova.plugins.barcodeScanner.scan(
            function (result) {
                me._barcodeResult = result.text;
                alert("Barcode Scanned:" + me._barcodeResult);        
            },
            function (error) {
                alert("Scanning failed: " + error);
            }
        );
    }

    onSuccess(result) {
        this._barcodeResult = result.text;
        alert("Barcode Scanned:" + this._barcodeResult);
    }

    onFailure(error) {
        alert("Scanning failed: " + error);
    }
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Глядя на документы , кажется, что cordova.plugins.barcodeScanner.scan() ожидает, что вы передадите в него функцию.Но вы называете это так:

 cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));

Это передает результат функции .onSuccess(result), но result не определено, поэтому вы получаете ошибку.Кроме того, вы хотите, чтобы this был экземпляром класса, но, определив me как this вне класса, me не будет соответствовать экземпляру класса, как вы этого хотите.Но вам все равно это не нужно.

Попробуйте вместо этого передать функции:

cordova.plugins.barcodeScanner.scan((result) => this.onSuccess(result),(error)=> this.onFailure(error))
0 голосов
/ 25 апреля 2018

Возможно, проблема в сфере использования вами этого. Попробуйте:

var me = this; //(put this at class level)
cordova.plugins.barcodeScanner.scan(me.onSuccess, me.onFailure);
...