背景

我使用的API在每个函数上使用成功和失败回调 . 我已经在它上面扩展了一个包装层,它使用Promises来解释成功和失败的回调,但是有些函数需要额外的回调作为它们的参数,例如:

Low Level JS API

function addProgressListener(successCallback, failureCallback, progressCallback);

TypeScript Wrapper

function addProgressListenerAsync(progressCallback): Promise<boolean> {
  return new Promise((resolve, reject) => {
    addProgressListener(
      () => resolve(true),
      (err) => reject(err),
      progressCallback);
  });
}

在更高级别,我在async / await样式中使用它,但由于progressCallback将返回我想要附加到ProgressBar组件的多个值,我想将它包装在Observable中 .

问题

如何在Observable中仅包装progressCallback部分?我无法将整个调用包装到addProgressListener,因为它以async / await方式使用,如下所示:

async function process(): Promise<any> {
  try {

    await addProgressListener((value) => {
       // Value = percentage complete
       // How do I get this value into an Observable that my component can bind to?
    }

    // ... do actual processing stuff
  }
  catch(err) {
  }

我以为我可以在调用函数之前创建Observable,并以某种方式在回调中添加"observer.next(value)"调用类似于我在这个问题上收到的答案Wrap API Call in Observable但是查看RxJS文档我不需要't see a way to add the .next() callback to already created instance of an Observable, only inside the Observable.create'的回调(这需要我换行)对addProgressListenerAsync的调用...) .

我也接受任何关于编写包装器以实现此目的的替代方法的建议,尽管Promise样式工作已经完成,因此重写整个事物以使用Observables可能不切实际 .