Puppeteer: page.waitForNavigation () timeout = 0 tidak menonaktifkan waktu tunggu, tetapi sebenarnya menyetelnya ke nol

Dibuat pada 18 Nov 2017  ·  3Komentar  ·  Sumber: puppeteer/puppeteer

v1.0.0-rc halaman.waitForNavigation ()

menyetel batas waktu: 0 harus menonaktifkan waktu tunggu sesuai dengan dokumen (artinya tidak pernah habis), tetapi tampaknya benar-benar menyetelnya ke 0 detik, lalu berjanji akan segera kembali ke nol setiap saat.

bug

Komentar yang paling membantu

@vonGameTheory terima kasih atas penyelidikannya. Saya sudah mengirimkan perbaikannya.

Semua 3 komentar

Atau setelah dipikir-pikir, mungkin ini bukan "menyetelnya ke nol detik" daripada hanya melanggarnya entah bagaimana karena tidak menimbulkan kesalahan batas waktu, tetapi janji yang dikembalikan sepertinya menghilang (dimulai sebagai tertunda tapi diam-diam pergi ke null segera). Bagaimanapun, itu tidak berhasil.

Jadi, inilah sedikit kode yang relevan dari NavigatorWatcher.js, baris 49 dan berikut ini:

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

Jika batas waktu disetel ke nol, maka _createTimeoutPromise mengembalikan null polos non-Promise, yang berakhir di fungsi Promise.race di atasnya, tampaknya dengan gagasan bahwa ia hanya akan mengabaikannya, tetapi non-Promise apa pun yang diberikan ke Promise.race akan "memenangkan perlombaan" segera dan dikembalikan sebagai nilai yang diselesaikan, sehingga menyelesaikan _navigationPromise dengan null, yang seharusnya tidak pernah terjadi.

@vonGameTheory terima kasih atas penyelidikannya. Saya sudah mengirimkan perbaikannya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

selfrefactor picture selfrefactor  ·  3Komentar

td0m picture td0m  ·  3Komentar

barnash picture barnash  ·  3Komentar

namma-geniee picture namma-geniee  ·  3Komentar

sheweichun picture sheweichun  ·  3Komentar