首页 > 解决方案 > 如何在 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' } }

标签: javascriptnode.jsasync-awaitsettimeout

解决方案


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 中的函数名称在调试过程中为您提供帮助(但它们是可选的)。


推荐阅读