1. ホーム
  2. javascript

Promiseを使ってポーリングされた条件が満たされるまで待つ

2023-12-03 03:02:14

質問

特定の条件が真になるまで解決しないJavaScriptのプロミスを作成する必要があります。 私がサードパーティのライブラリを持っているとしましょう、そして私はそのライブラリ内で特定のデータ条件が存在するまで待つ必要があります。

私が興味を持っているシナリオは、この条件が満たされたとき、単にポーリングする以外に知る方法がないものです。

私はそれを待つ約束を作ることができ、このコードは動作しますが、この問題に対してより良い、またはより簡潔なアプローチはありますか?

function ensureFooIsSet() {
    return new Promise(function (resolve, reject) {
        waitForFoo(resolve);
    });
}

function waitForFoo(resolve) {
    if (!lib.foo) {
        setTimeout(waitForFoo.bind(this, resolve), 30);
    } else {
        resolve();
    }
}

使用方法

ensureFooIsSet().then(function(){
    ...
});

私は通常、最大ポーリング時間を実装しますが、この問題を曇らせたくなかったのです。

どのように解決するのですか?

小さなバリエーションとして、名前付き IIFE を使用すると、コードがもう少し簡潔になり、外部スコープを汚染するのを避けることができます。

function ensureFooIsSet() {
    return new Promise(function (resolve, reject) {
        (function waitForFoo(){
            if (lib.foo) return resolve();
            setTimeout(waitForFoo, 30);
        })();
    });
}