首页 > 解决方案 > 轮询时承诺异步等待

问题描述

我正在尝试将使用承诺(和轮询)的函数转换为异步函数,但我不确定它是如何工作的。

我有这个:

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);
}

标签: javascriptecmascript-6promiseasync-await

解决方案


setInterval不适合异步等待。最好使用在循环的每次迭代中再次调用的 setTimeout 的“承诺”版本。

const myFunction = async = () => {
  let condition = false;

  while (!condition) {
    await new Promise(resolve => setTimeout(resolve, 100));
    condition = processCondition();
  }
}

推荐阅读