2017-06-10 21 views
0

Ich habe ein Problem, wenn ich versuche, einige Daten in der Funktion von WebTorrent zu protokollieren.

Ich möchte einige Werte von this.client.add protokollieren, aber ich habe keinen Zugriff.

Eine Idee, was hier vor sich geht?

import Webtorrent from 'webtorrent'; 

    class PlaylistController { 
     /** @ngInject */ 
     constructor($http, $log) { 
     this.log = $log; 
     this.client = new Webtorrent(); 

     $http 
      .get('app/playlist/playlist.json') 
      .then(response => { 
      this.Torrent = response.data; 
      }); 
     } 

     addTorrent(magnetUri) { 
     this.log.log(magnetUri); 

     this.client.add(magnetUri, function (torrent) { 
      // Got torrent metadata! 
      this.log.log('Client is downloading:', torrent.infoHash); 

      torrent.files.forEach(file => { 
      this.log(file); 
      }); 
     }); 
     this.log.log('sda'); 
     this.log.log(this.client); 
     } 
    } 

    export const playlist = { 
     templateUrl: "app/playlist/playlist.html", 
     controller: PlaylistController, 
     bindings: { 
     playlist: '<' 
     } 
    }; 

Here is the output of the console

Eine andere Sache sein I Yeoman für das Gerüst meiner app und seine hat JSLint mit console.log verboten und dessen gesagt, dass Sie Winkel verwenden müssen. $ Log, aber das, was seine I Ich will das nicht ändern, ich möchte das Problem hier verstehen.

+0

add '/ * eslint no-Konsole: [ "Fehler", { allow: ["warn", "error"]}] */'in der ersten Zeile der JS-Datei, um die' console.log() 'Warnung zu entfernen. [Referenz] (http://eslint.org/docs/rules/no-console) –

+0

Ja, das ist eine andere Lösung, aber ich möchte verstehen, warum ich $ log in der Funktion nicht verwenden kann. – Merlyn007

+0

Sie verwenden 'this' innerhalb der Funktion (torrent) {...}, die sich auf diese Funktion bezieht und nicht auf die Klasse (auf die Sie sich beziehen wollen). In reinem ES6 könnten Sie anstelle eines normalen Pfeils eine Pfeilfunktion verwenden, so dass diese Referenz die äußere bleibt. – DiegoRBaquero

Antwort

0

Sie müssen entweder auf diese (die Klasse) als eine andere Variable verweisen, die innerhalb der Funktion (torrent) verwendet werden soll, oder Pfeilfunktionen verwenden, damit diese Referenz die Klasse eins bleibt.

Lösung 1, eine weitere Variable mit der Klasse Ref:

addTorrent(magnetUri) { 
    this.log.log(magnetUri); 

    var that = this; 

    this.client.add(magnetUri, function (torrent) { 
     // Got torrent metadata! 
     that.log.log('Client is downloading:', torrent.infoHash); 

     torrent.files.forEach(file => { 
     that.log(file); 
     }); 
    }); 
    this.log.log('sda'); 
    this.log.log(this.client); 
    } 

Lösung 2, Pfeil Funktionen:

addTorrent(magnetUri) { 
    this.log.log(magnetUri); 

    this.client.add(magnetUri, torrent => { 
     // Got torrent metadata! 
     this.log.log('Client is downloading:', torrent.infoHash); 

     torrent.files.forEach(file => { 
     this.log(file); 
     }); 
    }); 
    this.log.log('sda'); 
    this.log.log(this.client); 
    }