2017-11-15 3 views
1

나는 근본적으로 내가 뭔가 잘못하고 있다고 생각합니다. 필터링 된 목록에서 하나의 엔티티를 가져 오려고합니다. 엔티티가 없으면 엔트리를 만들어야합니다. 내가이 관찰 돌아 대신 관찰 내에서 돌아 가기

getOrCreateNew(receiverId: number) : Observable<Conversation> { 
    var userId = this.identity.userInfo.id; 

    //TODO: you should be using an expression here, and having a builder for generating your 
    //filters in case you want to switch them in the future 
    var employerFilter = new PropertyFilterNode("EmployerUserId", FilterCondition.Equal, receiverId.toString()); 
    var employeeFilter = new PropertyFilterNode("EmployeeUserId", FilterCondition.Equal, userId.toString()); 
    let conversationFilter = new BinaryFilterNode(employerFilter, employeeFilter, Combiner.Or); 

    this.getList(conversationFilter).subscribe(entities => { 
     if (entities == null || entities.length == 0) { 
      let conversation: Conversation; 
      conversation.employerUserId = receiverId; 
      conversation.employeeUserId = userId; 
      return this.create(conversation); 
     } 
     else { 
      let entity = entities[0]; 
      return Observable.of(entity); //.Return(entity) 
     } 
    }); 

    return null; 
} 

가 어떻게 내부 구독에서 반환되는 관찰을 반환 할 수 있습니다 아무것도

을 반환하지해야하기 때문에이 기능 같은 느낌

잘못입니까?

+0

'getOrCreateNew'는 어떻게 사용됩니까? 그것은 'null'을 반환하는 것으로 보이지만 관찰 가능을 반환하는 것으로 입력됩니다. 또한 오류를 숨길 수있는 여러 위치에 주석을 입력해야합니다. –

답변

1

getList 구독이 mergeMap 또는 switchMap이 (create뿐만 아니라 관측 반환 고려) 있어야하는데 제안 작동 방법 :

return this.getList(conversationFilter).mergeMap(entities => { 
    if (entities == null || entities.length == 0) { 
     let conversation: Conversation; 
     conversation.employerUserId = receiverId; 
     conversation.employeeUserId = userId; 
     return this.create(conversation); 
    } 
    else { 
     let entity = entities[0]; 
     return Observable.of(entity); //.Return(entity) 
    } 
}); 

이 경우 su가 아니기 때문에 값을 내리기 위해 getOrCreateNew에서 반환 된 관찰 가능 항목을 구독해야합니다 내부적으로 씌어있다.

1

놓습니다 returnthis.getList 전 :

return this.getList(conversationFilter).subscribe(entities => { 
+0

목록에서 Observable >을 반환합니다. Observable

+0

을 반환하려면 조건부로 관찰 가능 내부를 조건부로 반환해야합니다. 그런 다음 subscribe 대신 mergeMap 또는 flatMap을 사용해야합니다. –