Ожидать рекурсивную функцию JavaScript, чтобы вернуть true - PullRequest
0 голосов
/ 16 сентября 2018

Итак, я использую кукловода в nodeJS, и у меня есть функция, которая рекурсивно вызывает себя до тех пор, пока указанная страница не будет загружена правильно:

const isPageAccessible = async (page, url) => {
    var pageRes = await page.goto(url, {
        timeout: 10000
    }).catch(e => console.log(e));
    if (!pageRes || pageRes.status !== 200) {
        console.log("Website didn't load properly.")
        isPageAccessible(page, url);
    } else {
        console.log("Loaded!")
        return true;
    }
}

Проблема здесь в том, что эта функция возвращает неопределенное значение после первого рекурсивного вызова (насколько я знаю, это нормально, поскольку асинхронные функции должны разрешаться со значением). Я хочу, чтобы код ждал, пока эта функция не разрешится с true

console.log(await isPageAccessible(page,LOGIN_URL));

console.log("Done!")

Таким образом, консоль будет записывать «Готово!» после того, как сайт был успешно загружен. Прямо сейчас это журнал "Готово!" даже если веб-сайт не был загружен, так как isPageAccessible функция возвращает неопределенное значение после первого вызова.

Любые мысли о том, как решить эту проблему, будут оценены!

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вместо этого используйте этот модуль npm,
https://www.npmjs.com/package/sync-request

    var request = require('sync-request');
    var res = request('GET', 'http://example.com');
    console.log(res.getBody());
    console.log("Done!")

Все операторы будут выполняться один за другим после завершения.
Меньший код, я думаю !!

0 голосов
/ 16 сентября 2018

Вам нужно вернуть рекурсивный вызов по цепочке Promise:

if (!pageRes || pageRes.status !== 200) {
  console.log("Website didn't load properly.")
  return isPageAccessible(page, url);
}
...