Puppeteer: page.waitForNavigation () timeout = 0 لا يؤدي إلى تعطيل المهلة ، ولكنه في الواقع يعينها على صفر

تم إنشاؤها على ١٨ نوفمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: puppeteer/puppeteer

الإصدار 1.0.0-rc page.waitForNavigation ()

ضبط المهلة: يجب أن يقوم

bug

التعليق الأكثر فائدة

vonGameTheory أشكركم على التحقيق. لقد أرسلت الإصلاح.

ال 3 كومينتر

أو عند التفكير الثاني ، ربما لا يكون "تعيينه على صفر ثانية" بدلاً من مجرد كسره بطريقة ما لأنه لا يؤدي إلى حدوث خطأ في المهلة ، ولكن يبدو أن الوعد الذي تم إرجاعه قد اختفى (يبدأ على أنه معلق ولكنه يذهب بصمت إلى لاغية على الفور). على أي حال ، لا يعمل.

إذن هنا هو الجزء ذي الصلة من الكود من 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 أشكركم على التحقيق. لقد أرسلت الإصلاح.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات