2016-11-25 5 views
0

私はRXSwiftの新機能ですが、単純な非同期の例を実装しようとしています。RXSwift単純な非同期の例ですか?

サブスクリプションは決して呼び出されません。

私が見逃していますか?

let disposeBag = DisposeBag() 

Observable<Any>.create { 

    observer in 

    DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 3) { 

     observer.onNext("done") 

     observer.onCompleted() 

    } 

    return Disposables.create() 

} 
.subscribe { print($0) } 
.addDisposableTo(disposeBag) 

================= UPDATE ======================

私は以前の値を渡すことができる、より高度な、何かをしようとしていますが、その結果は期待できませんでした。何が恋しい?私が期待したもの

は、(1行わ)次

あった - (2行わ行わ1)

1行う(次

出力は次

ました - 完了2)

完了テッド

class AsyncObject { 

    func asyncTest1() -> Observable<String> { 

     return Observable<String>.create { 

      (o: AnyObserver<String>) -> Disposable in 

      DispatchQueue.main.asyncAfter(deadline: .now() + 3) { 

       o.onNext("done 1") 

       o.onCompleted() 

      } 

      return Disposables.create() 

     } 

    } 

    func asycTset2(value: String) -> Observable<String> { 

     return Observable<String>.create { 

      (o: AnyObserver<String>) -> Disposable in 

      DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 

       o.onNext("\(value) - done 2") 

       o.onCompleted() 

      } 

      return Disposables.create() 

     } 

    } 

} 

class ViewController: UIViewController { 

    let disposeBag = DisposeBag() 

    let observer = AsyncObject() 

    // MARK: Init Methods 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     self.observer.asyncTest1() 
     .flatMap { self.observer.asycTset2(value: $0) } 
     .subscribe { print($0) } 
     .addDisposableTo(disposeBag) 

    } 

} 

答えて

0

は、私はあなたが期待される結果を達成するために、オリジナルのもので、これをマージすることができると思い、RxSwiftスラック@sergdotから

let test1 = self.observer.asyncTest1().shareReplay(1) 

let test2 = test1.flatMap { self.observer.asycTset2(value: $0) } 

Observable.of(test1, test2).merge().subscribe { 

    print($0) 

} 

または

let test1 = self.observer.asyncTest1().shareReplay(1) 

let test2 = test1.flatMap { self.observer.asycTset2(value: $0) } 

test1.concat(test2).subscribe { 

    print($0) 

} 
2

を助けを得ました。だからこのように見えるはずです

let test1 = self.observer.asyncTest1() 
let test2 = test1.flatMap { self.observer.asyncTest2() } 

Observable 
    .of(test1, test2) 
    .merge() 
    .subscribe { print($0) } 
    .addDisposableTo(disposeBag) 
+0

クールで素晴らしい!それは私が欲しいものです! – PatrickSCLin

+0

どう違うのですか test1.concat(test2).subscribe {print($ 0)} .addDisposableTo(disposeBag) – PatrickSCLin

+0

とどちらが良いですか? – PatrickSCLin

関連する問題