1

wiki と同じことをして、SpookyJS で外部関数を呼び出そうとします: https://github.com/WaterfallEngineering/SpookyJS/wiki/Introduction

しかし、次のコードを試すと、次のエラーが発生します。

ReferenceError: 変数が見つかりません: test

try {
    var Spooky = require('spooky');
} catch (e) {
    var Spooky = require('../lib/spooky');
}

var urls = ["http://www.google.fr",
            "http://www.yahoo.com"
          ];

exports.clicker = function(req, res)
{
  console.log("FIRST: " + visitUrl + " \n\n\n END FIRST");


  var visitUrl = function(urlIndex, nbClicked)
  {
      console.log("HELLO");
  };

  var spooky = new Spooky(
    {
      child: {
        // transport: 'http'
      },
      casper: {
        logLevel: 'debug',
        verbose: true
      }
    }, function (err)
    {
      if (err)
      {
        e = new Error('Failed to initialize SpookyJS');
        e.details = err;
        throw e;
      }

      spooky.start(urls[0]);

      console.log("SECOND: " + visitUrl + " \n\n\n END SECOND");

      spooky.then([{
        test: visitUrl
      }, function(){

        console.log("THIRD: " + test + " \n\n\n END THIRD");
      }]);

      spooky.run();
    });

    // Uncomment this block to see all of the things Casper has to say.
    // There are a lot.
    // He has opinions.
    spooky.on('console', function (line) {
      console.log(line);
    });

    spooky.on('hello', function (greeting) {
      console.log(greeting);
    });

    spooky.on('log', function (log) {
      if (log.space === 'remote') {
        console.log(log.message.replace(/ \- .*/, ''));
      }
    });
}

次の 2 つのログが機能します。

console.log("FIRST: " + visitUrl + " \n\n\n END FIRST");
console.log("SECOND: " + visitUrl + " \n\n\n END SECOND");

しかし、3番目のものはエラーメッセージの原因です:

console.log("THIRD: " + test + " \n\n\n END THIRD");

なにか提案を?

4

3 に答える 3

1

大きな答えを出すのではなく、あなたの投稿にコメントしたいと思いますが、私には評判がありません。

アッシングで関数を渡すことはできません。あなたがするなら

var x = 'HELLO'
spooky.then([{
    XinCasper : x
}, function(){
    //do something with XinCasper
}])

それはうまくいくでしょう。オブジェクトまたは配列を渡したい場合は、JSON.stringify を使用して、casper スコープで再構築します。

casper スコープから不気味な関数にアクセスする場合は、代わりに次のようにイベント エミッターを使用します (主に最後の行を参照してください)。

try {
var Spooky = require('spooky');
} catch (e) {
    var Spooky = require('../lib/spooky');
}

var urls = ["http://www.google.fr",
        "http://www.yahoo.com"
      ];

exports.clicker = function(req, res)
{
console.log("FIRST: " + visitUrl + " \n\n\n END FIRST");


var visitUrl = function(urlIndex, nbClicked)
{
  console.log("HELLO");
};

var spooky = new Spooky(
{
  child: {
    // transport: 'http'
  },
  casper: {
    logLevel: 'debug',
    verbose: true
  }
}, function (err)
{
  if (err)
  {
    e = new Error('Failed to initialize SpookyJS');
    e.details = err;
    throw e;
  }

  spooky.start(urls[0]);

  console.log("SECOND: " + visitUrl + " \n\n\n END SECOND");

  spooky.then(function(){
      //casper scope
      var y = 'something'
      this.emit('third', y)
  });

  spooky.run();
});

spooky.on('third', function(y){
    console.log('Hey, I can output ' + y + ' here.') 
}
于 2015-11-26T17:08:38.707 に答える
0

最後に、SpookyJS の代わりにPhantomJS-nodeを使用して、必要なことを行うことに成功しました。

于 2015-03-18T21:12:30.737 に答える
0

明らかに、変数を使用していますtest

console.log("THIRD: " + test + " \n\n\n END THIRD");

最初に宣言せずに。

var test;

req多分に置き換えます。:)

于 2015-03-18T01:31:30.473 に答える