このような.Error
を使用しないでください。これは概念的にエラーケースではありません。キャッシュには何もありません。それは一般的な状況です。普通のことから "間違った"ものは何もなかった。代わりに、.Completed
イベントを送信してください。あなたのコードが動作していない理由については
concat
に含まObservable
から来るエラーが最終concat
Observable
上のエラーになりますので、それはです。 Rx
で覚えておくべきことは、一度.Completed
イベント(またはあなたのケースでは).Error
イベントがあると、これ以上、.Next
イベント(または任意のイベント)が終了するということです。
あなたが.Completed
を使用している場合だからではなく、あなたのコードはように動作します:
class Cache {
func getItem(itemID: Int) -> Observable<Item> {
return Observable<Item>.create { observer in
// if not found...
observer.onCompleted() // you would of course really try to get it
// from the cache first.
return NopDisposable.instance
}
}
}
class Network {
func getItemN(itemID: Int) -> Observable<Item> {
return Observable<Item>.create { observer in
// get some `item` from the network and then..
observer.onNext(item)
return NopDisposable.instance
}
}
}
let observable = Observable.of(cache.getItem(itemID), network.getItem(itemID)).concat().take(1)
observable.subscribeNext { item in
print(item)
}
素晴らしい、おかげで男!良い説明と完璧に動作します – Josh
Rxで楽しい時を過ごしてください! – solidcell