Can';在呼叫Meteor.users.findOne时,请不要在没有光纤的情况下等待

Can';在呼叫Meteor.users.findOne时,请不要在没有光纤的情况下等待,meteor,Meteor,我正在使用来自RabbitMQ的消息,然后想使用raix推送插件向APNS/GSM发送推送通知。我已将RabbitMQ与Meteor集成,但当我尝试查询用户的记录以获取其_id(raix push所需)时,会出现以下异常: W20150930-16:03:53.929(-7)? (STDERR) Error: [Error: Can't wait without a fiber] W20150930-16:03:53.929(-7)? (STDERR) at Connection.<

我正在使用来自RabbitMQ的消息,然后想使用raix推送插件向APNS/GSM发送推送通知。我已将RabbitMQ与Meteor集成,但当我尝试查询用户的记录以获取其_id(raix push所需)时,会出现以下异常:

W20150930-16:03:53.929(-7)? (STDERR) Error: [Error: Can't wait without a fiber]
W20150930-16:03:53.929(-7)? (STDERR)     at Connection.<anonymous> (packages/jakobloekke_rabbitmq/packages/jakobloekke_rabbitmq.js:20:1)
W20150930-16:03:53.929(-7)? (STDERR)     at Connection.emit (events.js:117:20)
W20150930-16:03:53.929(-7)? (STDERR)     at Connection.<anonymous> (/Users/lsacco/.meteor/packages/jakobloekke_rabbitmq/.0.0.2.1lqodho++os+web.browser+web.cordova/npm/node_modules/amqp/lib/connection.js:176:14)
W20150930-16:03:53.930(-7)? (STDERR)     at Connection.emit (events.js:95:17)
W20150930-16:03:53.930(-7)? (STDERR)     at CleartextStream.emit (events.js:95:17)
W20150930-16:03:53.933(-7)? (STDERR)     at CleartextStream.<anonymous> (_stream_readable.js:765:14)
W20150930-16:03:53.933(-7)? (STDERR)     at CleartextStream.emit (events.js:92:17)
W20150930-16:03:53.933(-7)? (STDERR)     at emitReadable_ (_stream_readable.js:427:10)
W20150930-16:03:53.933(-7)? (STDERR)     at _stream_readable.js:420:7
W20150930-16:03:53.933(-7)? (STDERR)     at process._tickCallback (node.js:448:13)

我必须将
Meteor.bindEnvironment()
添加到所有三个回调(连接就绪、连接队列和队列订阅)中才能使其工作。这让我很困惑,因为我认为如果顶级函数有它,我就没事了。

findOne
需要在光纤中调用。您是否尝试过使用wrapAsync?如果您的意思是
Meteor.wrapAsync(getUser(uid))
或包装
Meteor.users.findOne()
,那么是的。结果相同。
    RabbitMQ.connection.on('ready', function () {
        RabbitMQ.connection.queue('ma.services.gapns', {'durable': true, 'autoDelete': false, closeChannelOnUnsubscribe: true }, function (queue) {
            try 
                queue.bind('ma.integration.exchange', 'gapns');
                queue.subscribe(function (msg) {
                    var data = {};
                    if (msg.content) {
                        data = msg.content;
                    }
                    var uid = data.uid,
                        system = data.system,
                        count = data.count;
                    if (uid && system && count >= 0) {
                        var user = getUser(uid);

                        Push.send({
                            from: 'push',
                            title: 'Hub Notification',
                            text: system + " request(s) to approve",
                            badge: count,
                            sound: 'ping.aiff',
                            query: {
                                userId: user._id
                            }
                        });
                    }

                });
            }
            catch (e) {
                logger.error("Exception occurred while processing push notifications: " + e);
            }
        });
    });

function getUser(uid) {
    var Future  = Npm.require('fibers/future');
    var future = new Future();
    Meteor.users.findOne({username: uid}, {}, function(err, result) {
        if (err) {
            future.throw(err);
        }

        future.return(result);
    });
    return future.wait();
}