考虑以下 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/