javascript - 基于回调返回 Observable

标签 javascript angular typescript rxjs

我尝试根据我的需要调整 ngx-chips 的工作示例。这是 onRemoving 方法示例的样子:

public onRemoving(tag: TagModel): Observable<TagModel> {
        const confirm = window.confirm('Do you really want to remove this tag?');
        return Observable
            .of(tag)
            .filter(() => confirm);
    }

现在,我不想使用 windows.confirm,而是使用具有 AskQuestion 方法和以下签名的自定义组件:

AskQuestion(question: string, yesCallback: () => void, noCallback?: () => void): void {

所以现在我有多个回调,但 ngx-chips 组件期望我返回一个可观察对象。我尝试使用 bindCallback 方法将回调转换为可观察对象:

 public onRemoving(tag: TagModel): Observable<TagModel> {

    const choiceCallback = (choice: boolean): TagModel=> {
      if (choice)
        return tag;
    };

    this.questionService.AskQuestion("Remove item?", () => choiceCallback(true), () => choiceCallback(false))

    return Observable.bindCallback(choiceCallback);
  }

但看起来我做错了。有什么想法吗?

最佳答案

bindCallback() 的定义如下:

Give it a function f of type f(x, callback) and it will return a function g that when called as g(x) will output an Observable.

并且您的用法不符合此描述。 choiceCallback() 不返回返回 observable 的函数。

改为使用 Observable 构造函数:

public onRemoving(tag: TagModel): Observable <TagModel> {

  return Observable.create(observer => {
    const choiceCallback = (choice: boolean) => {
      if (choice) {
        observer.next(tag);
      }
      observer.complete();
    };

    this.questionService.AskQuestion("Remove item?", () => choiceCallback(true), () => choiceCallback(false));
  });
}

关于javascript - 基于回调返回 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550423/

相关文章:

javascript - D3 变焦设置

Angular Material 5 - 在 Mat 列表中显示全文(Word Wrap)

javascript - 在 Backbone 中 this.model 是未定义的,为什么?

javascript - 没有所有切片的 HIghcharts 圆环图

javascript - 如何在 Ajax.ActionLink 中获取表单中输入的数据?

javascript - 如何执行d3拖放

javascript - ngFor 隐藏取消隐藏详细信息

typescript - 当 Y 具有索引签名时,为什么我会得到 "Property ' X' does not exit on type 'Y'?

typescript - Vue/Typescript/Jest - Jest 单元测试语法错误 : Unexpected token import

javascript - RxJS:批量请求和共享响应