• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Async Functions inside node_helper.js

Scheduled Pinned Locked Moved Development
asyncscrapingnodehelpermodule
6 Posts 5 Posters 1.2k Views 5 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    magmirusr
    last edited by Sep 16, 2021, 8:23 PM

    I wrote a little MagicMirror module which web scrapes a website with puppeteer.
    Therefore I’ve used async functions to fetch the data.
    It’s working fine but as soon as I send it back to my main.js file it appears as a Promise and I can’t process the data.

    Any suggestions how to wait for the data before sending it to the main.js file?

    ...
    socketNotificationReceived : function(notification, payload) {
    var self = this
    switch(notification)
    {case"CASE_1":
    text = scrape("https...")
    this.sendSocketNotification("text",text)
    break}}
    ...
    async function scrape(url){
    try{
    const browser = await puppeteer.launch()
    const page = await browser.newPage();
    await page.goto(url)
    
    const [el] await page.$x("...")
    const txt = await el.getProperty("textContent")
    const rawTxt = await txt.jsonValue
    browser.close()
    return rawTxt} catch {
    return "ERROR"}}
    
    
    
    S M 2 Replies Last reply Sep 17, 2021, 12:46 AM Reply Quote 0
    • J Offline
      Jalibu Module Developer
      last edited by Sep 16, 2021, 9:16 PM

      https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await

      1 Reply Last reply Reply Quote 0
      • S Away
        sdetweil @magmirusr
        last edited by Sep 17, 2021, 12:46 AM

        @magmirusr you will have to do promise.then in the non-async method to wait for the data

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        1 Reply Last reply Reply Quote 0
        • B Offline
          bizzeonline
          last edited by Sep 17, 2021, 8:02 AM

          Hence I’ve utilized async capacities to get the information.

          It’s turned out great however when I send it back to my main.js record it shows up as a Promise and I can’t handle the information.
          Thanks.
          Aaki working at Bizzeonine

          1 Reply Last reply Reply Quote 0
          • M Offline
            MMRIZE @magmirusr
            last edited by Sep 17, 2021, 8:14 AM

            @magmirusr

            case "CASE_1":
              scrape("...").then((text) => {
                this.sendSocketNotification("text", text)
              })
              break
            

            Or

            case "CASE_1"
              const AsyncJob = async () => {
                var text = await scrape("...")
                this.sendSocketNotification("text", text) 
              }
              AsyncJob()
              break
            
            M 1 Reply Last reply Sep 17, 2021, 10:53 AM Reply Quote 0
            • M Offline
              magmirusr @MMRIZE
              last edited by Sep 17, 2021, 10:53 AM

              @mmrize
              Thank you very much!!! It’s working now. :)

              1 Reply Last reply Reply Quote 0
              • K kayakbabe referenced this topic on Jan 26, 2024, 5:44 AM
              • 1 / 1
              1 / 1
              • First post
                6/6
                Last post
              Enjoying MagicMirror? Please consider a donation!
              MagicMirror created by Michael Teeuw.
              Forum managed by Sam, technical setup by Karsten.
              This forum is using NodeBB as its core | Contributors
              Contact | Privacy Policy