をもたらすが、私はしない、ウェブサイト使用ES6構文なしNightmare.jsと
var Nightmare = require('nightmare');
var vo = require('vo');
vo(run)(function(err, result) {
if (err) throw err;
});
function *run() {
var x = Date.now();
var nightmare = Nightmare();
var html = yield nightmare
.goto('http://google.com')
.evaluate(function() {
return document.getElementsByTagName('html')[0].innerHTML;
});
console.log("done in " + (Date.now()-x) + "ms");
console.log("result", html);
yield nightmare.end();
}
私はノードの古いバージョンを使用した環境でこれを実行したいをこすりするnightmare.jsを使用して、簡単なノードのスクリプトを構築しましたES6機能をサポートします。 githubページには、 "yield"キーワードなしでこれを行う方法の例はありません。
私はここES6構文なしでの使用例を見つけた:Webscraping with nightmare
私はこのようにそれを書いた:
var night = new Nightmare()
.goto('http://www.google.com')
.evaluate(function() {
return document.getElementsByTagName('html')[0].innerHTML;
},function (html) {
console.log("result", html);
}
)
.run(function (err, nightmare) {
if (err) return console.log(err);
console.log('Done!');
});
それはクラッシュしませんが、結果ロギング関数が呼び出されることはありません。
yieldの構文では、は「評価」から返された値を取得するのはかなり簡単ですがですが、それを実行する方法はありませんでした。
更新 これは受け入れられた回答とそのコメントに感謝しました。これは、「Q」を使用し、0.12以前のノードのバージョンで動作します。
var Nightmare = require('nightmare');
var Promise = require('q').Promise;
var x = Date.now();
var nightmare = Nightmare();
Promise.resolve(nightmare
.goto('http://google.com')
.evaluate(function() {
return document.getElementsByTagName('html')[0].innerHTML;
})).then(function(html) {
console.log("done in " + (Date.now()-x) + "ms");
console.log("result", html);
return nightmare.end();
}).then(function(result) {
}, function(err) {
console.error(err); // notice that `throw`ing in here doesn't work
});
https://babeljs.io/docs/usage/cli /#babel-node)は、使用例に応じて、より簡単な解決策になるかもしれません。基本的にはES6コードを実行する前にES6コードをES5に変換するラッパーです。 –