MagicMirror Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • Donate
    • Discord

    Async Functions inside node_helper.js

    Development
    async scraping nodehelper module
    5
    6
    458
    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
      magmirusr last edited by

      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 Reply Quote 0
      • Jalibu
        Jalibu Module Developer last edited by

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

        1 Reply Last reply Reply Quote 0
        • S
          sdetweil @magmirusr last edited by

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

          Sam

          Create a working config
          How to add modules

          1 Reply Last reply Reply Quote 0
          • B
            bizzeonline last edited by

            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
              MMRIZE @magmirusr last edited by

              @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 Reply Quote 0
              • M
                magmirusr @MMRIZE last edited by

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

                1 Reply Last reply Reply Quote 0
                • 1 / 1
                • First post
                  Last post
                Enjoying MagicMirror? Please consider a donation!
                MagicMirror created by Michael Teeuw.
                Forum managed by Paul-Vincent Roll and Rodrigo Ramírez Norambuena.
                This forum is using NodeBB as its core | Contributors
                Contact | Privacy Policy