Puppeteer: page.waitForNavigation () timeout = 0 deaktiviert das Timeout nicht, setzt es jedoch auf Null

Erstellt am 18. Nov. 2017  ·  3Kommentare  ·  Quelle: puppeteer/puppeteer

v1.0.0-rc page.waitForNavigation ()

Einstellen des Zeitlimits: 0 sollte das Zeitlimit gemäß den Dokumenten deaktivieren (was bedeutet, dass es niemals eine Zeitüberschreitung aufweist), aber es scheint es tatsächlich nur auf 0 Sekunden zu setzen und dann zu versprechen, dass es jedes Mal sofort auf Null zurückgesetzt wird.

bug

Hilfreichster Kommentar

@vonGameTheory Danke für die Untersuchung. Ich habe das Update gesendet.

Alle 3 Kommentare

Oder beim zweiten Gedanken, vielleicht ist es nicht "auf Null Sekunden setzen", sondern es nur irgendwie zu brechen, da es keinen Timeout-Fehler auslöst, aber das zurückgegebene Versprechen scheint einfach zu verschwinden (beginnt als ausstehend, geht aber stillschweigend zu sofort null). Auf jeden Fall funktioniert es nicht.

Hier ist also das relevante Codebit aus NavigatorWatcher.js, Zeile 49 und folgende:

    const lifecycleCompletePromise = new Promise(fulfill => {
      this._lifecycleCompleteCallback = fulfill;
    });
    this._navigationPromise = Promise.race([
      this._createTimeoutPromise(),
      lifecycleCompletePromise
    ]).then(error => {
      this._cleanup();
      return error;
    });
  }

  /**
   * <strong i="6">@return</strong> {?Promise<?Error>}
   */
  _createTimeoutPromise() {
    if (!this._timeout)
      return null;
    const errorMessage = 'Navigation Timeout Exceeded: ' + this._timeout + 'ms exceeded';
    return new Promise(fulfill => this._maximumTimer = setTimeout(fulfill, this._timeout))
        .then(() => new Error(errorMessage));
  }

Wenn das Zeitlimit auf Null gesetzt ist, gibt _createTimeoutPromise eine einfache Null ohne Versprechen zurück, die in der darüber liegenden Funktion Promise.race endet, anscheinend mit der Idee, dass sie es einfach ignorieren würde, aber alle Nicht-Versprechen, die Promise.race gegeben wurden "gewinnt das Rennen" sofort und wird als aufgelöster Wert zurückgegeben, wodurch _navigationPromise mit null aufgelöst wird, was niemals passieren sollte.

@vonGameTheory Danke für die Untersuchung. Ich habe das Update gesendet.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen