【问题标题】:RXJS ^5.3.0 with AWS JS SDKRXJS ^5.3.0 与 AWS JS 开发工具包
【发布时间】:2018-05-08 05:17:34
【问题描述】:

我正在尝试在 AWS JS SDK 中将 RxJS Observable 添加到 s3.upload()。以下是我的代码。 请注意,我使用的是 RXJS 版本 ^5.3.0。

const s3Config = {
        Key: logoName,
        Bucket: bucketName,
        Body: files[0],
        ACL: 'public-read'
      };

      const s3Upload = s3.upload(s3Config);
      const upload$ = Observable.bindNodeCallback(s3Upload.send, s3Upload);
      upload$.subscribe(
        (value) => console.dir('Yeah !' + value),
        (err) => console.dir(err)
      );

如何绑定 Observable 和 S3.upload 方法?请帮帮我!

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 rxjs reactive-programming


    【解决方案1】:

    bindNodeCallback 返回一个返回 observable 的函数。并且该函数应该传递每个通常会传递给绑定函数的非回调参数。

    此外,您很可能需要使用bind 来确保upload 方法绑定到s3

    我会这样做:

    const upload = Observable.bindNodeCallback(s3.upload.bind(s3))
    
    const upload$ = upload({
      Key: logoName,
      Bucket: bucketName,
      Body: files[0],
      ACL: 'public-read'
    });
    
    upload$.subscribe(
      data => console.dir(data),
      err => console.dir(err)
    );
    

    【讨论】:

    • 感谢您的回答!只是想知道,我在 const upload$ = upload({ Key: logoName, Bucket: bucketName, Body: files[0], ACL: 'public-read' }); 附近遇到打字稿验证错误说错误 TS2554: Expected 0 arguments, but got 1. 有没有办法避免这个 TS 验证错误?
    • 是的。我没有提到它,因为我以为你只是在使用 JavaScript。使用 TypeScript,最简单的解决方案是使用箭头函数并显式指定参数类型。看到这个答案:stackoverflow.com/a/43463287/6680611
    • 你可能很高兴知道 bindNodeCallback 的类型在 RxJS v6 中得到了改进,并且可以在不使用箭头函数的情况下推断类型。如果您安装了rxjsrxjs-compat,您应该能够使用 v6 而无需更改代码。
    • 其实,因为你需要将一个方法绑定到一个上下文,我认为箭头函数仍然是最好的选择。 IIRC,TypeScript 在使用bind 时仍有一些方法可以支持类型推断。
    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2012-09-21
    • 2019-11-04
    • 2017-09-06
    • 2017-08-02
    • 2018-01-19
    • 2011-11-10
    • 2012-05-24
    相关资源
    最近更新 更多