2

下面是我在 server/server.js 文件中的代码。当我打电话时,Meteor.apply('testMethod')我得到Error: listen EADDRINUSE. 我正在用陨石运行流星应用程序,安装的唯一非通用包是npm

var Fiber = Meteor.require('fibers');
var fiber = Fiber.current;
Meteor.methods({
    testMethod: function(){
        setTimeout(function(){fiber.run('test')}, 2000);
        res = Fiber.yield();
        console.log(res);
        return res;
    }
})

我知道这里最明显的解决方案是在光纤周围使用 Meteor 的包装器,但我真正想要实现的是在异步调用上从光纤产生,然后在某个事件处理程序中恢复。而且我还没有找到任何适合的东西。

堆栈跟踪:

Error: listen EADDRINUSE
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1039:14)
    at listen (net.js:1061:10)
    at net.js:1135:9
    at dns.js:72:18
    at process._tickCallback (node.js:415:13)
4

1 回答 1

1

我在 Meteor IRC 上回答了这个问题。

移动这一行:

var fiber = Fiber.current;

进入'testMethod'函数的第一行。像这样:

var Fiber = Meteor.require('fibers');

Meteor.methods({
    testMethod: function(){
        var fiber = Fiber.current;
        setTimeout(function(){fiber.run('test')}, 2000);
        res = Fiber.yield();
        console.log(res);
        return res;
    }
});

我相信您为什么会遇到这种情况是因为每个用户都有自己的“光纤”。所以当客户端调用服务端时,当前的纤程与你在外部作用域中声明的纤程不同。

于 2014-02-20T20:08:16.037 回答