v1.0.0-rc page.waitForNavigation ()
configuração de tempo limite: 0 deve desabilitar o tempo limite de acordo com os documentos (o que significa que nunca expira), mas parece apenas configurá-lo para 0 segundos e, em seguida, a promessa reverte para nulo imediatamente todas as vezes.
Ou pensando bem, talvez não seja "defini-lo para zero segundos" em vez de apenas quebrá-lo de alguma forma, pois não lança um erro de tempo limite, mas a promessa retornada apenas parece desaparecer (começa como pendente, mas vai silenciosamente para null imediatamente). Em qualquer caso, não funciona.
Então, aqui está a parte relevante do código do NavigatorWatcher.js, linha 49 e seguintes:
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));
}
Se o tempo limite for definido como zero, _createTimeoutPromise retornará um nulo simples não-Promise, que termina na função Promise.race acima dele, aparentemente com a ideia de que seria apenas ignorado, mas qualquer não-Promessa dada a Promise.race irá "ganhar a corrida" imediatamente e será retornado como o valor resolvido, resolvendo assim _navigationPromise com null, o que nunca deveria acontecer.
@vonGameTheory obrigado pela investigação. Enviei a correção.
Comentários muito úteis
@vonGameTheory obrigado pela investigação. Enviei a correção.