javascript - 如何将 canvas.toblob() 回调转换为 Observable

标签 javascript callback rxjs observable

我想创建一个返回文件可观察值的函数

我当前的工作代码使用 promise

testPromise(): Promise<File> {

  return new Promise((resolve, reject) => {

    const canvas = document.createElement('canvas');
    canvas.width = 800;
    canvas.height = 600;

    const context = canvas.getContext('2d');
    context.drawImage(image, 0, 0, 800, 600);

    canvas.toBlob((blob: Blob) => resolve(new File([blob], name)), type, quality);
  });
}

相反,我想返回 Observable<File>

我尝试了以下方法,但无法通过toBlob()参数如 typequality

testObservable(): Observable<File> {

  const canvas = document.createElement('canvas');
  canvas.width = 800;
  canvas.height = 600;

  const context = canvas.getContext('2d');
  context.drawImage(image, 0, 0, 800, 600);

  const toBlob = bindCallback(canvas.toBlob);

  return toBlob().pipe(
    map((blob: Blob) => {
      return new File([blob], name)
    })
  );
}

预期行为

const toBlob = bindCallback(canvas.toBlob);
toBlob(type, quality) // <= Expected 0 arguments, but got 2.

这里我在 toBlob 上遇到错误 Expected 0 arguments, but got 2.

当前行为

const toBlob = bindCallback(canvas.toBlob);
toBlob() // <= No type or quality arguments

这里是canvas.toBlob接口(interface),根据MDN docs

void canvas.toBlob(callback, mimeType, qualityArgument);

PS:我不想将 Promise 转换为 Observable,但我需要将回调直接转换为 Observable

有什么想法吗?

最佳答案

恐怕 bindCallback 在这里不是一个好的选择,因为它期望回调是最后一个参数,而不是 toBlob 所期望的第一个参数。

我认为你必须自己用 na Observable 来包装这个调用:

return new Observable(observer => {
  canvas.toBlob(result => {
    observer.next(result);
    observer.complete();
  }, type, quality);
});

关于javascript - 如何将 canvas.toblob() 回调转换为 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718974/

相关文章:

javascript - 获取css规则、chrome扩展

javascript - 如果文件名取自用户,则不应用 CSS 规则

javascript - Tampermonkey 脚本根据页面打开和呈现的方式给出不同的结果? (内容相同)

c++ - 何时在 C++ 中调用要移动到的对象的析构函数?

javascript - Observable.from([true]) 是做什么的?

error-handling - 在合并的可观察对象上捕获错误,并在RxJS中继续其他错误

javascript - 如何将状态/对象传递给子路由(react-router redux)?

javascript - NodeJS 和异步 hell

javascript - 在 node.js 中,什么时候使用事件,什么时候使用直接回调函数?

javascript - Angular 6 observables - 从 .subscribe() 函数中提取数据并在别处使用