如何创建一个 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.putObject
或 myS3.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.
我有一个 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.putObject
或 myS3.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.