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.
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.
Comentario más útil
@vonGameTheory gracias por la investigación. Envié la solución.