我需要在使用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' } }
虽然可以通过使用async
函数轻松修复,正如错误所示:
setTimeout(async function () {
宣传qazxsw poi可能是有益的:
setTimeout
因为那时它可以写成:
const delay = ms => new Promise(res => setTimeout(res, ms));
笔记:
¹:总是声明变量!
²:永远不要相信ASI拯救你,使用分号!
³:IIFE中的功能名称可在调试期间为您提供帮助(但它们是可选的)。
你必须在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);
})();
真棒!感谢@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)
不确定这是否是最佳做法,但它对我有用。
非常感谢大家!