javascript - 如何用函数包装导出工厂的组件?
问题描述
在我的 reactjs 应用程序中,我成功地使用了一个返回工厂的组件(我认为这是正确的名称)。
简单来说:
import { Auth } from "authenticator";
export default function SignIn() {
...
const signIn = (e) => {
Auth.signIn({username, password}).then((user) => {
...
});
}
}
如您所见,工厂函数返回承诺。
现在,我想用一个函数来包装 Auth 工厂,比如说一个油门。
因此,为了避免包装每个 Auth 函数调用(Auth.signIn、Auth.signUp、Auth.forgotPassword 等),我想将 Auth 组件包装在我的另一个组件中。
像这样的一些想法:
import { Auth } from "authenticator";
import { throttle } from "throttle";
export default function ThrottledAuth() {
return throttle(Auth);
}
当然,这个解决方案的问题是我不能做 - 正如我希望的那样 - 像:
import ThrottledAuth from "./ThrottledAuth";
ThrottledAuth.signIn({username, password)}).then((user) => {
...
});
因为我得到:“未捕获的 TypeError:promise.then 不是函数”,因为 Auth.signIn 返回一个承诺。
您能否建议包装工厂返回函数(返回承诺)的正确方法?
解决方案
我自己终于找到了这个解决方案,我完全不喜欢它,因为它很沉闷......
export async function throttledSignIn(props, {success, error, final}) {
throttle(
Auth.signIn({...props})
.then((result) => success(result))
.catch((data) => error(data))
.finally((data) => final(data))
);
}
以这种方式使用它:
import { throttledSignIn, throttledSignUp, ... } from "./ThrottledAuth";
throttledSignIn({
username,
password,
}, {
success: (user) => {
...
},
error: (err) => {
...
},
final: (data) => {
...
}
});
我不会接受这个答案,如果有更时尚的解决方案,我会很高兴阅读并采用它......
推荐阅读
- python - Matplotlib 将带有 url 的图形保存为 svg 导致错误
- bitbucket - 如何使用 Bitbucket API 从 Bitbucket 存储库中提取所有文件
- php - Fancybox modal,无法从数据库填充输入字段
- mysql - mysql 安装支持这种新的身份验证方法 (caching_sha2_password)
- java - 从 HTML 转换时缺少 PDF 页面
- rest - 如何在 Talend Api 测试人员的 Get 请求中传递参数列表
- c++ - 如何使用参数值(仅在运行时知道)调用函数(仅在运行时知道)?
- java - 如何在java中生成多级(行和列)数据透视表
- python - 在 fnproject 函数中包含自己的项目代码
- python - 将 YAML 配置作为变量读取到 Python 脚本