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.
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.
Komentar yang paling membantu
@vonGameTheory terima kasih atas penyelidikannya. Saya sudah mengirimkan perbaikannya.