Импорт асинхронных функций в Javascript - PullRequest
0 голосов
/ 10 декабря 2018

Я начинающий с Node, Javascript и Puppeteer.Учитывая следующий код, в котором я просто пытаюсь использовать одну функцию из другого файла:

const waitForFrame = require ("../../lib/frames");
const screenshotFolder = 'test/screenshots';

module.exports = async(page) => {

    try {
      const iframe = await waitForFrame(page);
      await iframe.waitForSelector('.competition-response__copy');
      await page.waitForSelector({
        visible: '.competition-response__copy'
      });

      const confirmationMessageText = await frame.$eval('.competition-response__copy > p', e => e.textContent);
      return confirmationMessageText;

    } catch (err) {
      await page.screenshot({
        path: screenshotFolder + '/saveYourEntryButton.png',
        fullPage: true
      });
    }

И вспомогательный файл с именем:

module.exports = async function waitForFrame(page) { export async 
function waitForFrame(page) {
  let fulfill;
  const promise = new Promise(x => fulfill = x);
  checkFrame();
  return promise;

  function checkFrame() {
    const frame = page.frames().find(f => f.name() === 'iframe');
    if (frame) {
      fulfill(frame)
    } else
      page.once('frameattached', checkFrame);
  }
};

И мой пакет JSON выглядит следующим образом:

"engines": {
  "node": ">=6"
},
"dependencies": {
  "chai": "^4.1.2",
  "chai-as-promised": "^7.1.1",
  "lodash": "^4.17.10",
  "mocha": "^5.2.0",
  "puppeteer": "^1.6.2",
  "yargs": "^12.0.1",
  "express": "^4.16.4",
  "supertest": "^3.3.0"
},
"devDependencies": {
  "chai": "^4.2.0",
  "chai-dom": "^1.8.1",
  "mocha": "^5.2.0",
  "js-comments": "^0.5.4",
  "chai-as-promised": "^7.1.1",
  "express": "^4.16.4",
  "supertest": "^3.3.0",
}
}

Я получаю сообщение об ошибке следующим образом:

import {waitForFrame} from "../../lib/frames";
       ^

SyntaxError: Unexpected token {
    at new Script (vm.js:79:7)

Я уверен, что это ошибка новичка, но благодарен за быстрый указатель.Я знаю, что есть несколько различных способов импортировать в зависимости от того, какие стандарты Javascript вы придерживаетесь.

Спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Вы пытаетесь использовать import как собственный, но этот параметр по-прежнему не поддерживается на ES6 , проблема не связана с асинхронными функциями, но импорт выполняется как неожиданный токен, у вас есть несколько альтернатив:

  1. Не используйте import или export и вместо этого используйте:

    const waitForFrame = require ("../../ lib / frames");

Это работает очень хорошо и поддерживается в Узле 6.

Миграция на узел 10, при этом поддерживается версия , и вы можете использовать ее.

Используйте компилятор, например babel или любой другой, который работает для вас, это включает в себя больше зависимостей, но тогда вы можете использовать современные API на старых версиях Node.

Все зависит от того, что вы предпочитаете.

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...