javascript - 如何在 3 秒后运行等待功能
问题描述
我需要在使用 async/await 方法完成 API 调用 3 秒后调用 await 函数,但不知道该怎么做。
我尝试将await函数包装在 setTimeout() 函数中,但最终得到错误:SyntaxError: await is only valid in async function
async function tasks(
task_id, tokenTenant
) {
return axios({
method: "get",
url: `https://omitted_url/api/v1/ftth/task/${task_id}`,
headers: {"X-Auth-Token": tokenTenant}
}).then(res => res)
}
setTimeout(function () {
taskResponse = await tasks(resStatus.data.task.id, tokenTenant)
console.log(taskResponse.data)
}, 3000)
控制台中的预期结果:
$数据:
{ id: '123abc456def',
status: 'Received',
result: null,
tenant_id: 'john_doe_tenant_id1234',
creation_time: '2019-04-22T13:49:01+0000' } }
解决方案
async
虽然正如错误所暗示的那样,这可以通过使用函数轻松解决:
setTimeout(async function () {
承诺如下可能是有益setTimeout
的:
const delay = ms => new Promise(res => setTimeout(res, ms));
因为那么它可以写成:
(async function /*³*/ delayTask() {
await delay(3000);
/*¹*/const taskResponse = await tasks(resStatus.data.task.id, tokenTenant); /*²*/
console.log(taskResponse.data);
})();
笔记:
¹:总是声明变量!
²:永远不要相信 ASI 会拯救你,使用分号!
³:IIFE 中的函数名称在调试过程中为您提供帮助(但它们是可选的)。
推荐阅读
- java - 我不确定为什么我的输出总是返回 false
- c# - 图像上的点密度
- android-studio - 在 Android Studio 的所有项目文件中搜索文本的快捷方式是什么?
- asp.net-core - 如何从 ASP.NET Core 异常中间件返回 404?
- javascript - 客户端 POST 数据后未调用 Flask render_template()
- gradle - 使用 Gradle 在不同的 JVM 中并行执行 JUnit5 测试
- apollo - 如何使托管联合脱机工作?
- c# - 逐字字符串 c# "'a\\\' b'"
- python - 按位置过滤 Instagram Hashtag 搜索 - Python
- rest - 如何保护单个用户用例的 REST API?