Как использовать обещание для асинхронной функции? - PullRequest
0 голосов
/ 18 января 2019

Как я могу использовать обещание для этой асинхронной функции?

Когда я вызываю асинхронную функцию, иногда происходит сбой, и в журнале записывается необработанное обещание. Как я могу использовать обещание здесь?

async function getDate(param) {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();

    const targetUrl = `http://some-site.com/summary?t= ${param} &culture=en_US`;
    await page.goto(targetUrl);

    const dateSelector = "some-css-selector";

    const dateText = await page.evaluate((sel) => {
        return document.querySelectorAll(sel)[0].innerHTML;
    }, dateSelector);

    const date = dateText.substring(6, 16);
    console.log(date);

    browser.close();
    return date;
}
//I am calling this function this way
const myDate = getDate(myParam);

Редактировать 1: Как и предполагалось, я добавил блок try / catch, который, похоже, решает проблему с ошибкой.

Теперь, как мне использовать .then() на myDate? Поскольку getDate() является асинхронной функцией, это обещание. Я хотел бы сделать что-то вроде этого, когда обещание будет выполнено:

myDate.then(
        console.log(`date1`, myDate)
    )

Прямо сейчас это приходит как

date1 Promise { <pending> }

Редактировать 2: Это решило это

myDate.then(result => console.log(result))

1 Ответ

0 голосов
/ 18 января 2019

Использование try/catch.

async function getDate(param) {
  try {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();

    const targetUrl = `http://some-site.com/summary?t= ${param} &culture=en_US`;
    await page.goto(targetUrl);

    const dateSelector = "some-css-selector";

    const dateText = await page.evaluate((sel) => {
        return document.querySelectorAll(sel)[0].innerHTML;
    }, dateSelector);

    const date = dateText.substring(6, 16);
    console.log(date);

    browser.close();
  } catch (error) {
    console.error(error);
  }
}

Подробнее об этом здесь

...