2016-08-12 2 views
0

나는 데이터베이스 변경, 콘솔이 '요, 뭔가 변화!'읽을 때이호출 방법은

class FinanceDB { 

    constructor() { 
    this.PouchDB = require('pouchdb'); 
    this.db = new this.PouchDB('fin'); //8080 
    this.remoteDB = new this.PouchDB('http://localhost:5984/rfin'); 

    this.db.sync(this.remoteDB, { 
     live: true, 
     retry: true 
    }).on('change', function (change) { 

     console.log('yo, something changed!'); 
     this.dosomething(); 

    }).on('error', function (err) { 
     console.log("error", err); 
     // yo, we got an error! (maybe the user went offline?) 
    }) 
    }; 

    dosomething() { 
    console.log('what now?'); 
    }; 
} 

같은 수준의 설정을 가지고 예상대로 하지만 내 클래스 메서드는 절대 실행되지 않으며 오류가 발생하지 않습니다. pouchdb 내부에서 메서드를 호출하려면 어떻게해야합니까? 여기 콜백의 기능으로

답변

1

:

on('change', function (change) { 

    console.log('yo, something changed!'); 
    this.dosomething(); 

}) 

당신은 콜백 클래스에서 분리되는 동적 this을 얻고있다.

ES6에서

, 지금 바로 '이'는 어휘 적 범위가 될 얻기 위해 화살표 기능으로 전환 할 수 있습니다 : 과거

on('change', (change) => { 

    console.log('yo, something changed!'); 
    this.dosomething(); 

}) 

, 일반적인 방법은 this에 동일하게 설정 새 변수를 만드는 것이 었습니다 JSfiddle here의 화살표 일정한 함수

var that = this; 
... 
on('change', function (change) { 

    console.log('yo, something changed!'); 
    that.dosomething(); 

}) 

비교 : 콜백을 설정하기 전에.