簡體   English   中英

從可觀察到的內部返回

[英]Return from inside an observable

我認為從根本上說我在做錯事。 我試圖通過從過濾列表中提取單個實體來查找單個實體,如果沒有實體,我需要創建一個實體。

我覺得這個函數是錯誤的,因為我應該返回一個可觀察到的東西,而不是什么也不返回

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

如何返回內部訂閱中返回的可觀察值?

return也放在this.getList之前:

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

getList訂閱的工作方式表明它應該是mergeMapswitchMap (考慮到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)
    }
});

在這種情況下,應該訂閱從getOrCreateNew返回的observable以便發出值,因為它不是內部訂閱的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM