javascript - Javascript:为什么 async/await 在这种情况下不起作用,而 setTimeout 工作得很好?
问题描述
我正在解决工作中的一个特定问题,我应该在按下按钮时从后端调用 3 个方法。最初我用 async/await 设置了它,它在我们公司的服务器中本地工作得很好。
这是原始代码:
async function attachDocumentsToForm(file: any, signature: any) {
let pdfFile = new File([file], `Подписанный_Файл_${formData?.serialNumber}.pdf`, {type:"text/plain"})
let sigFile = new File([signature], `Подпись_${formData?.serialNumber}.sig`)
await AttachmentApiClient.attach(
inquiryId,
`Подпись_${formData?.serialNumber}.sig`,
"Прочие документы",
{
data: sigFile,
fileName: `Подпись_${formData?.serialNumber}.sig`
});
await AttachmentApiClient.attach(
inquiryId,
`Подписанный_Файл_${formData?.serialNumber}.pdf`,
"Прочие документы",
{
data: pdfFile,
fileName: `Подписанный_Файл_${formData?.serialNumber}.pdf`
});
await EmployeeApiClient.signInquiry(inquiryId, new SignChiefVm({ isSigned: true, comment: commentText }))
setOpenedSnackbar(true)
setIsSigned(true)
}
但是,当应用程序部署到我们客户端的服务器时attach
,应该附加 pdf 文件的方法请求失败(似乎前端立即无法附加 pdf 文件,同时 .sig 附加方法工作得很好,无论在哪个命令我给他们每个人打电话)。作为一种解决方法,我使用了 setTimeout,每种方法之间的间隔为 2 秒和 2.5 秒,并且它起作用了。
这是一个新代码:
function attachDocumentsToForm(file: any, signature: any) {
let pdfFile = new File([file], `Подписанный_Файл_${formData?.serialNumber}.pdf`)
let sigFile = new File([signature], `Подпись_${formData?.serialNumber}.sig`)
AttachmentApiClient.attach(
inquiryId,
`Подписанный_Файл_${formData?.serialNumber}.pdf`,
"Прочие документы",
{
data: pdfFile,
fileName: `Подписанный_Файл_${formData?.serialNumber}.pdf`
});
setTimeout(() => {
AttachmentApiClient.attach(
inquiryId,
`Подпись_${formData?.serialNumber}.sig`,
"Прочие документы",
{
data: sigFile,
fileName: `Подпись_${formData?.serialNumber}.sig`
});
}, 2500)
setTimeout(() => {
EmployeeApiClient.signInquiry(inquiryId, new SignChiefVm({ isSigned: true, comment: commentText }))
setOpenedSnackbar(true)
setIsSigned(true)
}, 4500)
}
我已经对其进行了多次测试,它可以正常工作,但在我看来,这样的解决方案非常糟糕。在这种情况下 async/await 不起作用的可能原因是什么?如果不直接为每个请求设置时间,可能的解决方案是什么?
最好的问候,康斯坦丁
PS:前端技术栈 - React & Typescript
解决方案
推荐阅读
- python - 如何存储在使用 Python 从 CSV 文件中检索的数据库中
- reactjs - 强制 React 重新渲染使用 React.createElement 创建的子组件
- kubernetes - 多部署规模k8s
- google-apps-script - Google Apps 脚本 - DriveApp.getFoldersByName - 无法按预期获取文件 - 尝试从文件夹名称获取 FileID
- python - 在我的程序中从 xlrd 加载 open_workbook 时遇到问题
- java - JavaFX - 排序方法的进度条
- r - 二次展开数据框并根据日期和时间填充值
- bluetooth - ESP32 蓝牙。重定向串行输出
- c# - 分离实体框架实体是否也会分离其子实体?
- django - Django 函数视图更新两个模板(当前和基础)