如何在3秒后运行await功能

问题描述 投票:0回答:3

我需要在使用async / await方法完成API调用3秒后调用await函数,但不知道如何操作。

我尝试在setTimeout()函数中包装await函数但最终得到错误:SyntaxError:await仅在异步函数中有效

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)

控制台中的预期结果:

$ data:

   { id: '123abc456def',
     status: 'Received',
     result: null,
     tenant_id: 'john_doe_tenant_id1234',
     creation_time: '2019-04-22T13:49:01+0000' } }
javascript node.js async-await settimeout
3个回答
0
投票

虽然可以通过使用async函数轻松修复,正如错误所示:

 setTimeout(async function () {

宣传qazxsw poi可能是有益的:

setTimeout

因为那时它可以写成:

 const delay = ms => new Promise(res => setTimeout(res, ms));

笔记:

¹:总是声明变量!

²:永远不要相信ASI拯救你,使用分号!

³:IIFE中的功能名称可在调试期间为您提供帮助(但它们是可选的)。


0
投票

你必须在async中使用await函数。

我们的Promise代码中没有async和await关键字。我们使用它们来配置调用我们的promise并等待它完成的异步函数,如下所示:

 (async function /*³*/ delayTask() {
    await delay(3000);
    /*¹*/const taskResponse = await tasks(resStatus.data.task.id, tokenTenant); /*²*/
    console.log(taskResponse.data);
})();

0
投票

真棒!感谢@JonasWilms和@SelmiKarim指出我正确的方向。

我设法通过更改我原来的代码块来使setTimeout()工作:

var callMyPromise = async () => {
    var result = await (myPromise());
    return result;
};

setTimeout(function () {
   taskResponse = await tasks(resStatus.data.task.id, tokenTenant)
   console.log(taskResponse.data)
   }, 3000)

不确定这是否是最佳做法,但它对我有用。

非常感谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.