Puppeteer: page.waitForNavigation () timeout = 0 no deshabilita el tiempo de espera, pero en realidad lo establece en cero

Creado en 18 nov. 2017  ·  3Comentarios  ·  Fuente: puppeteer/puppeteer

v1.0.0-rc page.waitForNavigation ()

establecer el tiempo de espera: 0 debería deshabilitar el tiempo de espera de acuerdo con los documentos (lo que significa que nunca se agota el tiempo de espera), pero parece que en realidad lo establece en 0 segundos, y luego la promesa vuelve a ser nulo inmediatamente cada vez.

bug

Comentario más útil

@vonGameTheory gracias por la investigación. Envié la solución.

Todos 3 comentarios

O pensándolo bien, tal vez no se trata de "establecerlo en cero segundos" en lugar de simplemente romperlo de alguna manera, ya que no arroja un error de tiempo de espera, pero la promesa devuelta parece desaparecer (comienza como pendiente pero silenciosamente va a nulo inmediatamente). En cualquier caso, no funciona.

Así que aquí está el bit de código relevante de NavigatorWatcher.js, línea 49 y siguientes:

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

Si el tiempo de espera se establece en cero, entonces _createTimeoutPromise devuelve un nulo simple que no es Promise, que termina en la función Promise.race por encima de él, aparentemente con la idea de que simplemente lo ignoraría, pero cualquier no Promise dado a Promise.race "ganará la carrera" inmediatamente y será devuelto como el valor resuelto, resolviendo así _navigationPromise con null, lo que nunca debería suceder.

@vonGameTheory gracias por la investigación. Envié la solución.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ryanvincent29 picture ryanvincent29  ·  3Comentarios

historylife picture historylife  ·  3Comentarios

ngryman picture ngryman  ·  3Comentarios

MehdiRaash picture MehdiRaash  ·  3Comentarios

bricss picture bricss  ·  3Comentarios