2017-01-03 2 views
1

나는 내 firebase에서 angularfire2를 사용하여 데이터를 가져 와서 맵핑하고 데이터를 업데이트/체크 한 다음 다시 저장하려고하지만이 이상한 문제가있는 곳을 알려줍니다 'this.fs.getRiders'가 정의되지 않았습니까? 하지만 스트림을 만들기 위해 서비스를 사용하고 있습니다. 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다.각도 2 서비스 호출이 앵귤러 파이어 2 스트림에서 정의되지 않았습니까?

을 heres 몇 가지 코드

@Injectable() 
     export class RoundService { 

    public currentRound:FirebaseListObservable<any>; 

constructor(private af: AngularFire, private as:AuthService, private fs:FirebaseService) { } 

pullCurrentRound(serieUid:string){ 

    return this.af.database.object(`series/${serieUid}/currentRound`) 
    .flatMap((res)=>{ 
     return this.af.database.object(`rounds/${res.$value}`) 
     .map((res)=>res) 
     .do(this.roundUpdates) 
     .do(this.saveRound) 
    }) 
} 

saveRound(round){ 

    this.fs.getRiders.update(round.uid,round) 
     .then(snap=>{ 
     console.log(snap) 
     }) 
} 

그리고 오류

Uncaught TypeError: Cannot read property 'getRiders' of undefined 
at SafeSubscriber.RoundService.saveRound [as _next] (round.service.ts:57) 
at SafeSubscriber.__tryOrSetError (Subscriber.js:232) 
at SafeSubscriber.next (Subscriber.js:174) 
at Subscriber._next (Subscriber.js:125) 
at Subscriber.next (Subscriber.js:89) 
at DoSubscriber._next (do.js:82) 
at DoSubscriber.Subscriber.next (Subscriber.js:89) 
at DoSubscriber._next (do.js:87) 
at DoSubscriber.Subscriber.next (Subscriber.js:89) 
at MapSubscriber._next (map.js:83) 

누구나 아이디어를 가지고?

+0

@RaiVu 간단한 태그 다운 인용으로 오류를 다시 포맷하면 스택 추적을 읽는 것이 훨씬 더 어려워집니다. 편집하지 마십시오. – cartant

답변

5

this 당신이 this 화살표 기능을 사용 roundUpdatessaveRound

다른 방법 내에서 현재의 클래스 인스턴스를 가리키는 계속이 변경으로

pullCurrentRound(serieUid:string){ 

    return this.af.database.object(`series/${serieUid}/currentRound`) 
    .flatMap((res)=>{ 
     return this.af.database.object(`rounds/${res.$value}`) 
     .map((res)=>res) 
     .do(this.roundUpdates.bind(this)) // <<< changed 
     .do(this.saveRound.bind(this) // <<< changed 
    }) 
} 

을 기대할 수있는 곳을 가리키는 것이 아니라, 구체적인 경우에는 덜 편리합니다.

pullCurrentRound(serieUid:string){ 

    return this.af.database.object(`series/${serieUid}/currentRound`) 
    .flatMap((res)=>{ 
     return this.af.database.object(`rounds/${res.$value}`) 
     .map((res)=>res) 
     .do(x => roundUpdates(x)) // <<< changed 
     .do(round => this.saveRound(round) // <<< changed 
    }) 
} 
+1

매개 변수의 수가 중요하지 않기 때문에이 경우에는'bind'가 더 편리합니다. 다른 모든 경우에 화살표 기능을 사용하는 것이 IMHO입니다 (이미 내 대답에 추가됨). 귀하의 의견에 감사드립니다 :) –

+0

당신은 오신 것을 환영합니다. 당신이 듣기 좋다 니 일하게 만들 수 있습니다. –