أو عند التفكير الثاني ، ربما لا يكون "تعيينه على صفر ثانية" بدلاً من مجرد كسره بطريقة ما لأنه لا يؤدي إلى حدوث خطأ في المهلة ، ولكن يبدو أن الوعد الذي تم إرجاعه قد اختفى (يبدأ على أنه معلق ولكنه يذهب بصمت إلى لاغية على الفور). على أي حال ، لا يعمل.
إذن هنا هو الجزء ذي الصلة من الكود من NavigatorWatcher.js ، السطر 49 وما يليه:
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));
}
إذا تم تعيين timeout على صفر ، فإن _createTimeoutPromise يُرجع قيمة خالية بسيطة غير الوعد ، والتي تنتهي في وظيفة Promise.race أعلاه ، على ما يبدو بفكرة أنها ستتجاهلها فقط ، ولكن أي غير وعد مُعطى إلى Promise.race سوف "يفوز بالسباق" على الفور ويتم إرجاعه كقيمة تم حلها ، وبالتالي حل _navigationPromise بـ null ، والذي لا ينبغي أن يحدث أبدًا.
vonGameTheory أشكركم على التحقيق. لقد أرسلت الإصلاح.
التعليق الأكثر فائدة
vonGameTheory أشكركم على التحقيق. لقد أرسلت الإصلاح.