我正在尝试将使用promise(和轮询)的函数转换为异步函数,但我不确定该如何工作。
我有这个:
function myFunction() {
return new Promise(resolve => {
// stuff here ...
var poll = setInterval(function() {
if (condition) {
clearInterval(poll);
resolve("done");
}
}, 100);
});
}
..但我不确定await
在这里:
async function myFunction() {
// stuff here ...
var poll = setInterval(function() {
if (condition) {
clearInterval(poll);
// await what?
}
}, 100);
}
答案 0 :(得分:1)
setInterval
在异步等待中表现不佳。最好使用setTimeout的“承诺版本”,在每次循环迭代时再次调用。
const myFunction = async = () => {
let condition = false;
while (!condition) {
await new Promise(resolve => setTimeout(resolve, 100));
condition = processCondition();
}
}
答案 1 :(得分:-1)
您创建的函数并返回一个在间隔后解析的Promise。异步等待也用于简化promise的使用,而不是创建promise的函数。 async-await
中不能有myFunction
,但是可以在使用myFunction的地方使用它
您的代码看起来像
function myFunction() {
return new Promise(resolve => {
// stuff here ...
var poll = setInterval(function() {
if (condition) {
clearInterval(poll);
resolve("done");
}
}, 100);
});
}
您可以在使用myFunction之类的地方使用async await
async function someFunction() {
const data = await myFunction();
console.log(data)
}
答案 2 :(得分:-2)
async function myFunction() {
// stuff here ...
var poll = await setInterval(function() {
if (condition) {
clearInterval(poll);
// await what?
}
}, 100);
}