如何创建一个 javascript 辅助函数 / class 可以在每个暴露的方法之前执行异步任务

How do I create a javascript helper function / class that can perform an async task before each exposed method

我有一个 React 应用程序需要调用 AWS S3 API 几次。我的应用程序登录使用 Cognito,通过 Amplify 设置。一切正常,但我正在尝试清理一些代码,并且正在努力寻找构建代码的正确方法。

我目前正在做的是从 aws-amplify 导入 Auth,以及从 aws-sdk.

导入 AWS

这似乎不对,但这是我解决问题的方法..但本质上我必须创建一个异步函数来获取适用于 AWS SDK 的格式的凭据。该函数如下所示:

const getCreds = async () => {
  let curCred = await Auth.currentCredentials()
  return Auth.essentialCredentials(curCred)
}

在页面加载时的 useEffect 挂钩中,我正在从 S3 下载 JSON 文件。为此,我必须这样做:

const creds = await getCreds()
const myS3 = new AWS.S3({ credentials: creds })
const content = JSON.parse(await myS3.getObject({config}).promise()).Body.toSting('utf-8')
//process content...

我在应用程序的其他部分有类似的代码来执行 myS3.putObjectmyS3.getSignedURL 等操作。但每次我都需要获取新的信用并创建一个新的 S3 对象。

我想做的是将所有这些存储在一个文件中,这样我就可以 import myS3 from './myS3.js',然后创建一些帮助方法,例如

...
get = async (config) => return JSON.parse(await S3.getObject(config).promise())....
put = ...
sign = ...

理想情况下,创建它的方式是当我调用 get 方法时它会自动刷新信用,然后运行 ​​get 等

我只是在导出与 类 与函数之间进行循环。有没有正确/理智的方法来做到这一点?

您可以创建一个包含导出辅助函数的文件,如下所示:

export {
    get: async (config) => return JSON.parse(await S3.getObject(config).promise()),
    put: () => console.log('put'),
    sign: () => console.log('sign'),
}

并像这样在您的组件上使用它们:

import {get, put, sign} from './myS3';

get();
put();
sign();

或者:

import * as s3 from './myS3';

s3.get();
s3.put();
s3.sign();

原来我想做的是创建 Singleton.