Puppeteer: page.waitForNavigation () timeout = 0 não desativa o tempo limite, mas na verdade o define para zero

Criado em 18 nov. 2017  ·  3Comentários  ·  Fonte: puppeteer/puppeteer

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.

bug

Comentários muito úteis

@vonGameTheory obrigado pela investigação. Enviei a correção.

Todos 3 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mityok picture mityok  ·  3Comentários

ngryman picture ngryman  ·  3Comentários

ebidel picture ebidel  ·  3Comentários

kesava picture kesava  ·  3Comentários

sradu picture sradu  ·  3Comentários