PhantomJS NPM wrapAsync


#1

Hello all, I have run in to some trouble trying to save the results from a PhantomJS script in to a Collection. I am running the PhantomJS script with the help of an NPM package, it’s actually very similar to the example found here

var phantomjs = Npm.require('phantomjs');
var spawn = Npm.require('child_process').spawn;

Meteor.methods({
      runTest: function(options){
        command = spawn(phantomjs.path, ['assets/app/phantomDriver.js']);
        command.stdout.on('data',  function (data) {
          doSomeProcessingToData();
        });
        command.stderr.on('data', function (data) {
          console.log('stderr: ' + data);
        });
        command.on('exit', function (code) {
          saveToCollectionFunction();
        });
      }
    });

I am unsure what needs to be wrapped inside a

Meteor.wrapAsync();

call. Do I wrap both the phantomjs variable and the spawn variable? Or do I only wrap the function I am using in command.on(exit…) , saveToCollectionFunction(); ? I have tried several variations and I can’t seem to get it down. I have even tried Meteor.wrapAsync("runTest"); At any rate, the error I’m getting is -

throw new Error("Meteor code must always run within a Fiber. " + (STDERR) Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.