如何在 3 秒后运行 await 函数



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

我尝试将 await 函数包装在 setTimeout(( 函数中,但最终收到错误:语法错误: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)

控制台中的预期结果:

$ 数据:

   { id: '123abc456def',
     status: 'Received',
     result: null,
     tenant_id: 'john_doe_tenant_id1234',
     creation_time: '2019-04-22T13:49:01+0000' } }

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

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

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

const promise1 = new Promise(function (resolve, reject) {
  setTimeout(function () {
    resolve(tasks(resStatus.data.task.id, tokenTenant))
  }, 3000);
})
respo = await promise1.then(resp => resp)

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

非常感谢大家!

虽然这可以通过使用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 中的函数名称在调试期间为您提供帮助(但它们是可选的(。

你必须在异步中使用await函数。

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

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

最新更新