0

我试图了解噩梦和 vo 是如何相互作用的。请在下面找到噩梦页面的(几乎)原始示例。

谁能给我一个提示如何找出发生的事情的顺序,即

  • 为什么生成器函数需要 yield 和 return 语句才能使代码工作
  • vo / nightmare 如何自动触发收益率以使序列合理工作。背景是,我想知道何时将收益放在哪里,但是这里的收益语句似乎除了实际触发等待之外没有做任何其他事情。以我目前的知识,我可以在调用“.goto()”和“.end()”时复制示例并“等待”。

不幸的是,噩梦文档没有说明它的设计是如何工作的(与承诺和生成器的交互)。

如果有人能想到一个示例,如何手动解决 run() 承诺并触发所有 .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;
}

谢谢 !

4

1 回答 1

0

您需要按名称传递该方法,而不是实际调用它。Vo 将在运行时调用该方法。代码应阅读

vo( run )(function(err, result) {
  if (err) throw err;
  console.log("end result length: ", result.length);
});
于 2016-01-19T08:51:14.950 回答