[Verholpen] Uncaught TypeError: Cannot read properties of undefined (reading 'complete')

Reactiescore
48
Ik weet niet of dit een bekende error is, maar wilde het toch even melden.
Ik ondervind hier overigens geen hinder bij, zoek ook geen hulp met het op te lossen.

Als dit soort posts niet de bedoeling zijn, of dit wordt niet zo gewaardeerd, laat het me dan a.u.b. vriendelijk weten en dan doe ik dit niet weer. Ik probeer alleen maar behulpzaam te zijn :)
Ik heb geprobeerd om alle relevante informatie op te zoeken en te vermelden.

Exacte stappen om te herproduceren:
- Log in in het spel en laat een van je ridders voor de eerste keer sterven.
- Bekijk de quest voor het tot leven wekken van je ridder.
- Start het proces van het tot leven wekker van je ridder.
- Dupliceer je tabblad een aantal keer.
- Wacht totdat je quest voltooit.
- In het eerste tabblad, klik de quest popup box weg door op de "Opdracht voltooien" knop te drukken.
- Ga naar het volgende tabblad, (open je dev tools in met console om de stacktrace te zien)
- Klik op de "Opdracht voltooien" scherm.

Functionele omschrijving:
Dit resulteerde bij mij in een uncaught exception met de titel als text. En geen visuele wijzigingen in het Scherm
Verwachtte resultaat zou zijn dat de quest popup box zou verdwijnen zoals het dat deed in het eerste tabblad.

Herhaaldelijk klikken leidt (zoals te verwachten) opnieuw tot dezelfde error.
Op het kruisje rechtsbloven klikken levert nog steeds het gewenste resultaat op

Code:
game.js:199 Uncaught TypeError: Cannot read properties of undefined (reading 'complete')
    at Object.completeQuest (game.js:199:4676)
    at HTMLDivElement.<anonymous> (game.js:199:1503)
    at HTMLDivElement.dispatch (game.js:8:42951)
    at HTMLDivElement.v.handle (game.js:8:40946)
completeQuest @ game.js:199
(anonymous) @ game.js:199
dispatch @ game.js:8
v.handle @ game.js:8

Hieronder is hoe de chrome dev tools mij de code tonen, zoals mijn browser hem uitvoert.
Regel 6 in het onderstaande fragment is de source van de error, de `complete` functie wordt aangeroepen op de return value van `getQuest(t)`, en die is `undefined`.
Waarschijnlijk het gevolg van de foutieve aanname dat de id van de geselecteerde quest altijd een bestaande quest is. Want je kunt geen quest selecteren die niet bestaat.
Echter, het is wel mogelijk dat de quest ophoudt met bestaan, nadat deze geselecteerd is.
JavaScript:
completeQuest: function(e, t) {
    e ? (Quests.getQuest(t).complete(!1, function(e) {
        Questlines._questlineComplete(t)
    }),
    $(".btn-confirm-yes").remove()) : (t = Questlines._getSelectedQuestId(),
    Quests.getQuest(t).complete(!1, function(e) {
        Questlines._questlineComplete(t)
    }),
    Dialog.close())
    }
 

Duckje

Teamleden
Tribal Wars Team
Community Manager
Reactiescore
2.427
Is dit niet ergens normaal? Je drukt op een knopje die in je sessie eigenlijk niet meer bestaat? Dit lijkt me niet echt een bug
 
Reactiescore
48
Is dit niet ergens normaal? Je drukt op een knopje die in je sessie eigenlijk niet meer bestaat? Dit lijkt me niet echt een bug

Ik kijk hier misschien op een vreemde manier naar, omdat ik van beroep software engineer ben. Een uncaught exception is in mijn ogen altijd een bug.

Ik zou dan op z'n minst de functie in een try/catch wrappen en iets als `Dialog.close();` aanroepen in de catch block. Want zoals je zegt, dat knopje (en de hele quest) bestaat niet meer, dus dat scherm zou niet gerenderd moeten worden. (Nadeel van jQuery ipv een reactive frontend library zoals vue of react :p dan had je dit niet gehad :p)


Maar los van mijn rant over hoe ik denk dat software zou moeten werken die ik niet heb geschreven, en waar ik nagenoeg niks van weet, als dit geen bug is, excuses voor het aanmaken het topic.
 

Duckje

Teamleden
Tribal Wars Team
Community Manager
Reactiescore
2.427
Ik kijk hier misschien op een vreemde manier naar, omdat ik van beroep software engineer ben. Een uncaught exception is in mijn ogen altijd een bug.

Ik zou dan op z'n minst de functie in een try/catch wrappen en iets als `Dialog.close();` aanroepen in de catch block. Want zoals je zegt, dat knopje (en de hele quest) bestaat niet meer, dus dat scherm zou niet gerenderd moeten worden. (Nadeel van jQuery ipv een reactive frontend library zoals vue of react :p dan had je dit niet gehad :p)


Maar los van mijn rant over hoe ik denk dat software zou moeten werken die ik niet heb geschreven, en waar ik nagenoeg niks van weet, als dit geen bug is, excuses voor het aanmaken het topic.
Je moet je niet excuseren omdat je iets meldt :) Ik heb het hoe dan ook even doorgegeven richting InnoGames.

DS-22889
 
Bovenaan