javascript - 在 Typescript 中如何在绑定(bind)类型安全的同时 promise 一个函数?

标签 javascript node.js typescript amazon-s3

考虑以下 promise :

import { S3 } from 'aws-sdk'
import { promisify } from 'util'

const s3 = new S3({ apiVersion: '2006-03-01' })
const getObject = promisify<S3.GetObjectRequest, S3.GetObjectOutput>(
  s3.getObject
)

这工作正常,除了你会得到像 TypeError: this.makeRequest is not a function 这样的错误,因为 s3.getObject 现在绑定(bind)到错误的 这个范围。然而,这:

const getObject = promisify<S3.GetObjectRequest, S3.GetObjectOutput>(
  s3.getObject.bind(s3)
)

破坏类型安全并会出错:Unsafe use of expression of type 'any'。(假设您使用严格模式)。

那么我怎样才能在 Typescript 中 promise 像 s3 的 getObject 这样的东西呢?

最佳答案

您可以传递另一个调用 s3.getObject() 的函数,而无需绑定(bind)它。使用箭头函数,您只需很少的额外代码即可完成此操作。

const getObject = promisify<S3.GetObjectRequest, S3.GetObjectOutput>(
  name => s3.getObject(name)
)

但是,AWS 开发工具包运算符函数通常有一个返回 promise 的 .promise 方法,您不必手动 promise 。

s3.getObject(name).promise();

关于javascript - 在 Typescript 中如何在绑定(bind)类型安全的同时 promise 一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883652/

相关文章:

javascript - 为什么我收不到邮件?

node.js - 如何监控Mongoose连接池

javascript - 如何在保持库模块化的同时在 Node 和浏览器中使用相同的库?

javascript - python ajax请求出错

javascript - 如何在 Redux-form 6 中从一个字段转到下一个字段(不使用 TAB)?

node.js - HTTP2 与 node.js 在 nginx 代理后面

javascript - Angular:错误 TS2322:类型 'Observable<{}>' 不可分配...使用 share() 运算符

javascript - Typescript Angular ui 引导模式

angularjs - 使用 TypeScript 和 $inject 机制定义 AngularJS 指令

javascript - 对嵌套 ng-repeat 中的列进行排序(AngularJS)