2017-11-15 7 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'を返すようですが、observableを返すとタイプされます。また、いくつかの場所に注釈を入力すると、エラーがマスクされることがあります。 –

答えて

1

getListサブスクリプションが機能する方法は、(createも同様に観察を返すことを考慮して)mergeMapまたはswitchMapことになっていることを示唆している:

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) 
    } 
}); 

この場合、getOrCreateNewから返される観測値は、suではないため値を出力するために購読する必要があります内部で書かれています。

1

場所もthis.getListreturn

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

Observable >を返すリストを取得する必要があります。Observable

+0

を返す必要がある場合、条件付きでその値を使用する必要があります。次に、subscribeの代わりに 'mergeMap'または' flatMap'を使用してください。 –