2016-01-18 3 views
0

Je suis en train de gratter une page entière en utilisant js cauchemar et renvoyer le résultat à la fonction d'appel. Pour ce faire, en étendant l'exemple du cauchemar, je passe un argument à une fonction de générateur. Pour une raison que je ne comprends pas, la fonction run() n'est jamais appelée.passer argument aux générateurs, vo

Merci pour votre aide.

var Nightmare = require('nightmare'); 
var vo = require('vo'); 
const fs = require('fs'); 

url = "http://google.com"; 

vo(run(url))(function(err, result) { 
    if (err) throw err; 
    console.log("end result length: ", result.length); 

    fs.writeFile("test.html", result, function(err) { 
     if(err) { return console.log(err); } }) 

}); 

function *run(url) { 
    console.trace() 
    var x = Date.now(); 
    var nightmare = Nightmare(); 
    var html = yield nightmare 
     .goto(url) // 'http://google.com') 
     .evaluate(function() { 
     return document.getElementsByTagName('html')[0].innerHTML; 
     }); 

    console.log("done in " + (Date.now()-x) + "ms"); 
    console.log("result:", html.length); 

    yield nightmare.end(); 
    return html; 
} 
+0

S'il vous plaît voir [ « question devrait-elle inclure des « balises » dans leurs titres? »] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags -dans-leurs-titres), où le consensus est "non, ils ne devraient pas"! –

+1

Réponse facile: changez la ligne "vo (run (url)) (fonction (err, résultat) {})" en "vo (exécutez) (url, function (err, result) {})" –

Répondre

0

C'est juste une mauvaise terminologie dans l'exemple ci-dessus. Voilà comment fonctionne vo:

vo(run)(url1, function(err, result) { 
    if (err) throw err; 
    console.log("end result length: ", result.length); 

    fs.writeFile("test.html", result, function(err) { 
     if(err) { return console.log(err); } }) 

});