悪夢とvoがどのように相互作用するかを理解しようとしています. 悪夢のページの (ほぼ) 元の例を以下に示します。
誰かが起こることの順序を見つける方法のヒントを教えてください。
- コードが機能するためにジェネレーター関数が yield ステートメントと return ステートメントを必要とする理由
- シーケンスを合理的に機能させるために、どのように利回りが vo / nightmare によって自動的にトリガーされるか。背景は、いつどこにyieldを配置するかを知りたいのですが、ここのyieldステートメントは、実際に待機をトリガーする以外に何もしていないようです。私の現在の知識では、例をコピーして、「.goto()」と「.end()」を呼び出すときに「待機」することができます。
残念ながら、ナイトメアのドキュメントには、その設計がどのように機能するか (promise およびジェネレーターとの相互作用) は記載されていません。
run() promise を手動で解決し、ジェネレーター関数を意図したとおりに動作させるために必要なすべての .next() をトリガーする方法の例を誰かが思いつくことができれば、これはすでに大きな助けになります。
var Nightmare = require('nightmare');
var vo = require('vo');
vo( run() )(function(err, result) {
if (err) throw err;
console.log("end result length: ", result.length);
});
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.length);
yield nightmare.end();
return html;
}
ありがとう !