Javascript 如何等待对象在异步JS中构造

Javascript 如何等待对象在异步JS中构造,javascript,asynchronous,Javascript,Asynchronous,我从异步JS开始,遇到了一个我无法解决的问题。我和木偶演员一起工作,用的是无头铬合金。我需要处理一个我创建的对象,如下所示: const dataLayerPuppeteer = new dataLayer(page, containerId) 之后,我使用返回承诺的方法处理对象,因此我可以使用wait处理它们。然而,问题是,我需要等待对象被创建,直到我使用它,因为我得到的“数据层”是未定义的错误 我的问题是:如何等待这行代码的执行,然后在已定义DataLayerUppeter的情况下继续执行

我从异步JS开始,遇到了一个我无法解决的问题。我和木偶演员一起工作,用的是无头铬合金。我需要处理一个我创建的对象,如下所示:

const dataLayerPuppeteer = new dataLayer(page, containerId)
之后,我使用返回承诺的方法处理对象,因此我可以使用wait处理它们。然而,问题是,我需要等待对象被创建,直到我使用它,因为我得到的“数据层”是未定义的错误

我的问题是:如何等待这行代码的执行,然后在已定义DataLayerUppeter的情况下继续执行其余代码

谢谢

编辑(完整代码):

const puppeteer = require('puppeteer');
const dataLayer = require('puppeteer-datalayer');

(async () => {

    // Automate here
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    const containerId = "GTM-5LDMPBF";


    const dataLayerPuppeteer = new dataLayer(page, containerId);
    await page.goto('https://www.ifortuna.sk');

    await page.click('#header > nav > div.main-navigation > a'),

    console.log(await dataLayerPuppeteer.history());

    // console.log(await dataLayerPuppeteer.history());

    const div = await page.evaluate(() => {return (document.querySelector('p').innerHTML) });

    console.log(div);

    //await page.click('#header > nav > div.main-navigation > a');

    await browser.close(); 
})();
该代码不会引发该错误。如果它会抱怨
datalayerpuppeter
此行未定义:

console.log(await dataLayerPuppeteer.history());
这是因为您使用
const
在函数作用域中构造它,因此该变量除了在Promise回调中之外,在任何地方都无效

构造函数不能是异步的,行
constdatalayerpuppeter=newdatalayer(page,containerId)
将始终立即同步执行。没有必要用承诺来包装它,也没有必要以任何方式等待它。因此:

const dataLayerPuppeteer = new dataLayer(page, containerId);
...
console.log(await dataLayerPuppeteer.history());

这很好。如果您在其他地方还有其他问题,这是一个单独的主题。

如何准确定义
数据层
?这没关系,我只想等待这行代码出现,然后继续我的代码@decezeNo,它告诉您它不知道什么是
dataLayer
。它的定义方式和位置非常重要。它是我正在导入的模块中的一个类@deceze显示您是如何准确导入它的…感谢您提供的解决方案,但是我再次编辑了代码,这是当前状态,我收到了以下错误:UnhandledPromisejectionWarning:错误:评估失败:未定义数据层我找不到错误:/@deceze将其减少到最简单的示例
console.log(dataLayer)
过程中的每一步。如果我在goto方法之后使用console.log(dataLayer),我会得到:[Function:dataLayer]@deceze