Mam problem z dostępem do this kontekst w łańcuchu obietnicy {X1}}. Dostaję undefined, kiedy próbuję zobaczyć wartość this po zatrzymaniu debugera wewnątrz then().
Szukałem poprzedniego pytań na ten temat i opierałem się z odpowiedzi, próbowałem utworzyć zmienną foo poza zakresem, który był równy this, ale także wraca tak niezdefiniowany, gdy próbuję zobaczyć Wartość tego, gdy debugger zatrzymuje kod.

    updateQuantity: function(e,item) {
            if (e === null || e === "") {
                return
            }
            let originalQuantity = item.original_quantity;
            let updatedQuantity  = parseFloat(e)

            var foo = this;

            // can access other functions here, ex: this.updateName();

            axios.post('/api/inventory/' + item.inventory_id + '/update-quantity', {
                original_quantity: item.original_quantity,
                quantity: updatedQuantity
            })
            .then(response => {
                if (response.data && response.data.status == "success") {
                    this.showFlashMsg(response.data.message, true)
                    debugger
                } else if (response.data && response.data.status == "error") {
                    debugger
                }
            })
            .catch(err => {
                console.log(err);
            });
        },
0
burtonLowel 24 grudzień 2019, 08:30

1 odpowiedź

Najlepsza odpowiedź

Wygląda na to, że byłeś blisko.

TLDR; Przynajmniej przy użyciu maszyn / nowszych wersji ECMAScript (JS), za pomocą funkcji lambda (=>) będzie wiązać this do właściwego obiektu, stąd komentarz Saurabh Agrawal.

Używając starego wariant JS / ECMAScript, musisz uzyskać odniesienie do this, chcesz przejść do przykucanych metod, a następnie użyj tego zamiast this. Jeśli pamiętam, jest to jakiego typu maszynopisowe lub inne transplejki używają również podczas kierowania starszej wersji, jak również.

Korzystanie z kodu (nieświadomie), chciałoby to:

updateQuantity: function(e,item) {
            if (e === null || e === "") {
                return
            }
            let originalQuantity = item.original_quantity;
            let updatedQuantity  = parseFloat(e)

            // ADDED COMMENT -- looks like you already had a reference, just weren't using it
            var foo = this;

            // can access other functions here, ex: this.updateName();

            axios.post('/api/inventory/' + item.inventory_id + '/update-quantity', {
                original_quantity: item.original_quantity,
                quantity: updatedQuantity
            })
            .then(response => {
                if (response.data && response.data.status == "success") {
                    // EDIT -- use your variable reference to `this`
                    foo.showFlashMsg(response.data.message, true)
                    debugger
                } else if (response.data && response.data.status == "error") {
                    debugger
                }
            })
            .catch(err => {
                console.log(err);
            });
        },
1
ps2goat 24 grudzień 2019, 05:40