2016-05-27 13 views
1

In diesem Code füge ich eine Aktion für einen "Einsatz" hinzu und gebe seine ID als Parameter an eine Funktion weiter. Aber wenn ich diese Pfeilfunktion später anrufe, ist das Argument this.undoBet gleich this.local_bets[this.local_bets.length].bet_id - das letzte bet_id, das innerhalb der Schleife übergeben wurde.Typescript, Funktionsargument innerhalb der Pfeilfunktion

Wie man es so macht, dass innerhalb jeder Pfeilfunktion this.undoBet die bet_id erhalten würde, die ihm in dieser Schleife zugewiesen wird?

for (var k in this.local_bets) { 

    var bet = this.local_bets[k]; 

    if (bet.status == BetStatus.accepted) { 

     // Here bet_id is correct for every "bet" variable 

     this.addUndo("undo_bet",() => { 

      // When calling this later, bet_id equals to one that belongs to the last bet inside this.local_bets 

      this.undoBet(bet.bet_id); 
     }); 

    } 

} 

Antwort

3

Ein häufiger JavaScript-Fehler. Sein, weil for (var k in this.local_bets) { der Index wird tatsächlich der letzte einer nach der Zeit die fortlaufende Funktion ausgeführt wird.

Fix

Verwendung let:

for (let k in this.local_bets) { 

    let bet = this.local_bets[k]; 

Mehr

Das hier bedeckt https://basarat.gitbooks.io/typescript/content/docs/let.html

+0

Es hat funktioniert, danke! – ohyou

2

Versuchen Sie, diese (eine weitere lokale Variable wird in der jede neue Rückgängig-Wette Funktion scoped werden) :

this.local_bets 
    .filter(bet => bet.status == BetStatus.accepted) 
    .forEach(bet => this.addUndo("undo_bet",() => this.undoBet(bet.bet_id))); 
+0

Obwohl ich Funktion chining eleganter finde, habe ich hier ein Wörterbuch benutzt, also würde es nicht funktionieren. Danke für den Vorschlag! – ohyou