2016-11-21 1 views
2

나는 이온 2 프로젝트에 종사하고있다. 기기/휴대 전화의 모든 연락처를 반환 할 수 있습니다. 하지만 한 번에 하나의 요청으로 인해 성능이 매우 떨어지는 약속 코드를 사용했습니다. 자, 약속 된 코드를 관찰 대상으로 변경하고 싶습니다. 이 문제를 해결하도록 도와주세요. 약속을 관측 가능으로 변환하는 방법은 무엇입니까?

findContact(searchKey){ 
    if(searchKey.target.value == "" || searchKey.target.value == undefined || searchKey.target.value == null){ 
     this.contactSelected = false; 
    } else{ 
     this.contactSelected = true; 
    } 
    let options = { 
     multiple: true, 
     hasPhoneNumber: true, 
     filter: searchKey.target.value 
    } 
    let cantactFields = ['displayName', 'phoneNumbers']; 
    Contacts.find(cantactFields, options).then(res => { 
      this.contactResults = res; 
    }, (er) => { 
     console.log(er); 
    }) 
} 

Contacts.find()

내가 약속을 사용하는 방법이다. 이 메서드는 매우 느리게 연락처를 반환합니다.

+0

당신은 가능성이 XY로 문제가 발생하는 데 도움이됩니다. 약속과 관찰 가능 모두 동시에 여러 요청을 처리 할 수 ​​있습니다. 그리고 질문은 관련 코드를 표시하지 않습니다. – estus

답변

3

사용 가능 Observable.fromPromise 약속을 준수하도록 포장하십시오.

관찰 할 수있는대로 약속을 지키기 위해 이와 같은 작업을 수행 할 수 있습니다.

findContact(searchKey){ 
    if(searchKey.target.value == "" || searchKey.target.value == undefined || searchKey.target.value == null){ 
     this.contactSelected = false; 
    } else{ 
     this.contactSelected = true; 
    } 
    let options = { 
     multiple: true, 
     hasPhoneNumber: true, 
     filter: searchKey.target.value 
    } 
    let cantactFields = ['displayName', 'phoneNumbers']; 
    var promise =Contacts.find(cantactFields, options).then(res => { 
     this.contactResults = res; 
    }, (er) => { 
     console.log(er); 
    }) 
    return PromiseObservable.create(promise); //  Observable.fromPromise(promise) 
} 

희망이 관찰 가능한이 도움을 줄 수 아무것도, 방법은 '느린'인 경우

+0

이 코드를 제 코드로 바꿀 수 있습니까? –

+0

@CharanCherry 코드 –

+0

을 업데이트했습니다. 동일한 결과가 나타날 것이라고 생각합니다. 약속대로 요청을 보냈기 때문입니다. 그런 다음 응답을 관찰 가능으로 되돌립니다. 내가 맞습니까? –

관련 문제