木偶功能不能运行怎么办?

时间:2019-09-01 20:42:55

标签: javascript node.js puppeteer

    const puppeteer = require('puppeteer');

    const init = async () => {
      const browser = await puppeteer.launch({ headless: false });
      const page = await browser.newPage();
      // login
      let login = async () => {
        console.log('login init');
        await page.goto(HOME_PAGE);
        await page.type($clientID, CLIENT_ID);
        await page.type($userName, USER_NAME);
        await page.type($password, PASSWORD);
        await page.click($submitBtn);
        await page.waitFor(WAIT_SEC);
        await page.goto(SCHEDULE_PAGE);
        console.log('login end');
      }

      // look for schedule
      let setStartDate = async () => {
        console.log('start init');
        await page.waitFor(3000);
        await page.click('#selfsched_startDate_dtInput', { clickCount: 3 });
        await page.keyboard.press('Backspace');
        await page.type($startDate, START_DATE);
        console.log('start end');
      }

      let setEndDate = async () => {
        console.log('end init');
        await page.click($endDate, { clickCount: 3 });
        await page.keyboard.press('Backspace');
        await page.type($endDate, END_DATE);
        await page.keyboard.press('Enter');
        console.log('end end');
      }

      let confirmSchedule = async () => {
        console.log('confirm init');
        await page.waitFor(WAIT_SEC);
        await page.click($confirmBtn);
        console.log('confirm end');
      }

      let steps = [
        login(),
        setStartDate(),
        setEndDate(),
        confirmSchedule()
      ];

      await Promise.all(steps);

      console.log('im finishing');
      browser.close();
    }

    init()
      .then(values => {
        console.log('success');
      })
      .catch(err => {

      });

每当我的代码进入setStartDate函数时,都不会发生任何事情。
我已经添加了console.log条消息,但是它们并没有按照我认为的顺序排列。我以为Promise.all()等着一切……....我对async / promises / await的了解也不是最棒的:)谢谢您的帮助

控制台日志即时获取的顺序 login init start init end init confirm init login end

1 个答案:

答案 0 :(得分:1)

  

我认为Promise.all()会按顺序等待一切

这基本上与Promise.all的作用相反:

  

在执行给定的Promises数组时没有隐含的顺序。在某些计算机上,它们可以并行执行,或者在某种意义上可以同时执行,而在其他计算机上,它们可以串行执行。因此,在任何Promise中都不得依赖于Promise的执行顺序

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

您应该只按await的顺序进行操作:

await login()
await setStartDate()
await setEndDate()
await confirmSchedule()