Javascript 木偶演员功能不运行有什么问题吗?

Javascript 木偶演员功能不运行有什么问题吗?,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,每当我的代码到达setStartDate函数时,什么都不会发生我添加了console.log消息,但它们并不像我想象的那样按顺序出现。我想,Promise.all()。。。。。另外,我在async/promises/await方面的知识也不是最丰富的:)谢谢你的帮助 我得到的控制台日志的顺序 登录初始化 开始初始化 结束初始化 确认初始化 登录端 我想我保证一切都会井然有序 这基本上与承诺相反。所有的都做: 在执行给定的承诺数组时没有隐含的顺序。在某些计算机上,它们可以并行执行,或者在某种意

每当我的代码到达
setStartDate
函数时,什么都不会发生
我添加了
console.log
消息,但它们并不像我想象的那样按顺序出现。我想,
Promise.all()。。。。。另外,我在async/promises/await方面的知识也不是最丰富的:)谢谢你的帮助

我得到的控制台日志的顺序

登录初始化
开始初始化
结束初始化
确认初始化
登录端

我想我保证一切都会井然有序

这基本上与
承诺相反。所有的
都做:

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

您应该按顺序等待您的功能:

等待登录()
等待设置开始日期()
等待setEndDate()
等待确认时间表()

Promise.all()将以相同的顺序放置结果数组的元素,但调用不会是连续的。@ChrisG有趣。那么这个代码有多糟糕呢?不太糟糕;只需使用类似于
steps.forEach(step=>await step)
的方法,我的注释中的示例应该按原样工作<代码>等待步骤
是主体。不幸的是,
forEach
不能很好地处理
等待
(它不会在迭代之间等待承诺解决方案)。你必须使用老式的for循环,并在其中等待。是的,
Promise。当你不关心执行顺序时,所有的
都是有用的,只要所有的承诺都能成功解决。根据MDN:“这种方法对于聚合多个承诺的结果非常有用。”
    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 => {

      });