RXSwift简单的异步示例?

时间:2016-11-25 04:00:56

标签: swift rx-swift

我是RXSwift的新手,我只是尝试实现一个简单的异步示例

但订阅永远不会被调用。

我想念的是什么?

public class Notification(){
   public void printMessage(String k, String str){
      //Some code
   }
}

public class NotificationImpl1 extends Notification(){
     public void method1() {
          ErrorHelper helper = new ErrorHelper();
          helper.showMessage("test", this);
     }
}

public class ErrorHelper() {
    public void showMessage(String msg, Notification notification){
       // Change msg to necessary 2 parameters.
       String k = getK(msg);
       String str = getStr(msg);
       notification.printMessage(k, str);
    }
}

=================更新======================

我正在尝试做一些更高级的事情,一个允许从之前传递值的链,但结果不是预期的。我错过了什么?

输出

  

接下来(完成1 - 完成2)

我所期待的是

  

下一步(完成1)

     

接下来(完成1 - 完成2)

     

完成

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)

2 个答案:

答案 0 :(得分:2)

我认为你可以将它与原版合并,以达到预期的效果。所以看起来应该是这样的

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

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

答案 1 :(得分:0)

得到了RxSwift Slack @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)

}