Can';在呼叫Meteor.users.findOne时,请不要在没有光纤的情况下等待
我正在使用来自RabbitMQ的消息,然后想使用raix推送插件向APNS/GSM发送推送通知。我已将RabbitMQ与Meteor集成,但当我尝试查询用户的记录以获取其_id(raix push所需)时,会出现以下异常: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.<
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();
}