使用setTimeout在光纤内运行流星

时间:2017-04-21 01:40:03

标签: javascript meteor

当我尝试使用sleep进行循环时出现此错误

  

错误:Meteor代码必须始终在光纤内运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调。

我的代码:

var sockjs = require('sockjs');
var http = require('http');

var sockjsServer = sockjs.createServer({
  sockjs_url: '//d1fxtkz8shb9d2.cloudfront.net/sockjs-0.3.min.js'
});

sockjsServer.on('connection', function(conn) {
  console.log('on connection');
  conn.on('data', function(msg) {
    console.log('\nRECV:'+msg);
  });
});

var server = http.createServer();
sockjsServer.installHandlers(server, {prefix:'/hello'});
server.listen(8888, '0.0.0.0');

在同一档案中

   fs.readdir(directory, (err, files) => {
      if (err) {
        console.log("error get file");
      }

       if(files.length > 0) {
        for (var i = 0; i <files.length; i++) {
          Fiber(function()
          { 
            setTimeout( function()
            {
              Meteor.call('mymethodfile', files[i]);
            }, 1000 );
          }).run();
        }
      }
    });

请帮帮我

1 个答案:

答案 0 :(得分:0)

如果你想包装一个异步函数,你应该使用Meteor async wrap方法或meteorhacks:async包,你可以在这里看到相关答案:Meteor: Proper use of Meteor.wrapAsync on server

如果您想使用setTimeout,则必须使用Meteor.setTimeout方法:https://docs.meteor.com/api/timers.html