2017-10-02 6 views
1

Ich habe das folgende Problem: Ich habe eine Seitenauswertung in Puppenspieler, die asynchrone Teile enthält. Ich möchte den Wert vom asynchronen Teil zum Puppenspieler zurückgeben, kehrt jedoch einfach undefiniert zurück, ohne auf die Auflösung der Verheißung zu warten. Kann jemand das Problem lösen?Rückgabewert von Seitenauswertung (Puppenspieler, asnyc Programmierung)

Mein Beispielcode:

const puppeteer = require('puppeteer'); 
async function testing(num) { 
    const browser = await puppeteer.launch({ 
    headless: false, 
    ignoreHTTPSErrors: true 
    }); 
    const page = await browser.newPage(); 
    const evaluating = await page.evaluate((num) => { 
    //some synchrnous stuff (declaring some variablesand so on...) 
    function lookForNumber(num) { 
     if (num > 2) { 
     var asyncstuff = setTimeout(function() { 
      if (num > 10) { 
      console.log('number is greater than 9'); 
      var whatIwantToRetrun = 'ten'; 
      return Promise.resolve(whatIwantToRetrun); 
      //return here 
      } 
      if (num > 5 && num < 10) { 
      console.log('number is samller than 10'); 
      var whatIwantToRetrun = 'nine'; 
      return Promise.resolve(whatIwantToRetrun); 
      //return here 
      } 
      else { 
      num++; 
      lookForNumber(num) 
      } 
     }, 2000); 
     } 
    } 
    lookForNumber(num) 
    }, num) 
    console.log(evaluating); // returns undefined before function has finished 
} 
testing(4) 

Puppeteers Beispiel:

const result = await page.evaluate(() => { 
    return Promise.resolve(8 * 7); 
}); 
console.log(result); // prints "56" 

Chromes API on evaluate

Nach this link und der aktualisierten API, puppeteer wertet immer den Code, und, wenn die Auswertung ein Versprechen, wartet auf das Versprechen zu lösen und gibt den Versprechenswert zurück.

Vielen Dank im Voraus für jede Hilfe!

Edit: Ich habe es herausgefunden!

+0

ich Ihnen vorschlagen, um Ihre Frage neu bearbeiten. Und beantworte deine eigene Frage und markiere sie als Antwort, es ist erlaubt. –

+0

fertig! (10 Zeichen) – Noah

Antwort

1

Die Lösung zu meinem Problem:

const puppeteer = require('puppeteer'); 
let date = require('date-and-time'); 
async function testing(num) { 
    const browser = await puppeteer.launch({ 
    headless: true, 
    ignoreHTTPSErrors: true 
    }); 
    const page = await browser.newPage(); 
    await console.log('starting evaluation'); 
    let now = new Date(); 
    let time = date.format(now, 'YYYY/MM/DD HH:mm:ss'); 
    console.log(time); 
    const test = await page.evaluate(async (num) => { 
    console.log('starting evaluation'); 
    //some synchrnous stuff (declaring some variablesand so on...) 
    function lookForNumber(num) { 
     return new Promise((resolve, reject) => { 
     if (num > 2) { 
      var asyncstuff = setTimeout(function() { 
      if (num > 10) { 
       console.log('number is greater than 9'); 
       var whatIwantToReturn = 'ten'; 
       resolve(whatIwantToReturn); 
      } 
      if (num > 5 && num < 10) { 
       console.log('number is samller than 10'); 
       var whatIwantToReturn = 'nine'; 
       resolve(whatIwantToReturn); 
      } 
      else { 
       num++; 
       lookForNumber(num) 
      } 
      }, 5000); 
     } 
     }); 
    } 
    var returnvalue = await lookForNumber(num); 
    return returnvalue; 
    }, num) 
    console.log(test); 
    now = new Date(); 
    time = date.format(now, 'YYYY/MM/DD HH:mm:ss'); 
    console.log(time); 
    await browser.close(); 
} 
testing(6)