Используйте Asyn c / await при назначении значения глобальной переменной const - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь объявить и инициализировать переменную const с глобальной областью действия для модуля, и она должна получить значение из результата асинхронного / ожидающего. Вот код, который я пробовал, и переменная по-прежнему содержит неопределенное значение. Как я могу переписать это так, чтобы я все еще мог использовать константу, и она содержит желаемое значение:

const puppet = require('puppeteer')
const browser = (async () => { await puppet.launch() })();
const page = (async () => { await browser.newPage() })();

console.log( "browser holds: " + util.inspect(page) );
     // prints out undefined

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

На данный момент я могу сделать это, объявив переменные как 'var', а затем присвоив значение в .then (). Но я бы предпочел использовать для этого «const» как лучшую практику.

Вот код, который позволяет мне делать это как переменную и использовать ее в приложении:

const puppet = require('puppeteer')

async function setupNewPuppetWithKeys(puppetBrowser, puppetPage ){

  let browser = await puppet.launch();
  let page = await browser.newPage();
  page.setViewport({ width: 1280, height: 800 });

  logger.infoLog("initialized values for - " + puppetBrowser + ", " + puppetPage )
  return { [puppetBrowser] : browser , [puppetPage] : page };
}

var browserDev, pageDev;
setupNewPuppetWithKeys("browserDev", "pageDeV").then( (jsonResult) => {

   logger.infoLog("In Then received : " + util.inspect(jsonResult) );
   browserDev = jsonResult.browserDev;
   pageDev = jsonResult.pageDev;
} );

// I declare more browser and page variables here .. but you get the idea with the one I've done above.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020
const puppet = require('puppeteer')

async function main(){
const browser = await puppet.launch();
const page = await browser.newPage();

console.log( "browser holds: " + util.inspect(page) );
}

Вам не нужно определять независимые функции, вместо этого оберните их все внутри функции asyn c (поскольку await может использоваться только в функциях asyn c), теперь вы получите нужные значения.

0 голосов
/ 26 марта 2020

На данный момент , asyn верхнего уровня c / await не поддерживается. Что вы можете сделать, это создать «основную» асин c функцию, которую вы можете вызвать на верхнем уровне:

const puppet = require('puppeteer')

async function main() {
  const browser = await puppet.launch();
  const page = await browser.newPage();

  console.log( "browser holds: " + util.inspect(page) );
}

main();
...