javascript - Meteor.publish 回调需要在 Fiber 中包装

标签 javascript node.js meteor

每当客户端从页面重新加载/断开连接时,我都会收到以下错误。但是,当我删除涉及集合 myCollection.insert(data) 的这部分代码行时,错误消失了。

这里发生了什么?似乎没有涉及非 Meteor 库..

server/publications.js

Meteor.publish('mySubscription', function() {

    this._session.socket.on('close', function() {
        myCollection.insert(data)    // removing this line avoids the error
    });

    return mySubscription.find();
});

错误

packages/mongo-livedata.js:3022
        throw e;                                                              
              ^
Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
    at Object.Meteor.bindEnvironment (packages/meteor/dynamics_nodejs.js:65)
    at null.<anonymous> (packages/meteor/helpers.js:108)
    at MongoConnection.(anonymous function) [as remove] (packages/mongo-livedata/mongo_driver.js:561)
    at Meteor.Collection.(anonymous function) [as remove] (packages/mongo-livedata/collection.js:447)
    at SockJSConnection.<anonymous> (app/server/publications.js:33:26)
    at SockJSConnection.EventEmitter.emit (events.js:117:20)
    at Session.didTimeout (/Users/username/.meteor/packages/livedata/ab19e493b9/npm/node_modules/sockjs/lib/transport.js:210:23)
    at WebSocketReceiver.GenericReceiver.didAbort (/Users/username/.meteor/packages/livedata/ab19e493b9/npm/node_modules/sockjs/lib/transport.js:296:35)
    at thingy_end_cb (/Users/username/.meteor/packages/livedata/ab19e493b9/npm/node_modules/sockjs/lib/transport.js:280:22)
    at EventEmitter.emit (events.js:95:17)
    => Exited with code: 8
    => Meteor server restarted

使用 meteor 0.7.0.1

最佳答案

.on 中的回调将不再位于纤程中。尝试包装它 with Meteor.bindEnvironment() .

像这样:

this._session.socket.on('close', Meteor.bindEnvironment( function() {
    myCollection.insert(data)    // removing this line avoids the error
}, function( error) {console.log( error);});

关于javascript - Meteor.publish 回调需要在 Fiber 中包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182805/

相关文章:

javascript - 计时器 - Angular 8 的计时器

node.js mqtt 从回调发布到 mosquitto 代理

javascript - 在node.js上显示html

javascript - Meteor.js 按字段中的值过滤集合

javascript - 覆盖 Meteor 的异常处理

javascript - Meteor contentEditable 字段不起作用

javascript - 如何减少侧面的不透明度

javascript - 我收到错误$(…).modal不是函数,即使在jQuery之后导入了 Bootstrap ,我也该如何解决(使用npm版本)?

javascript - Validate.js 不显示错误

node.js - 在node.js中使用imagemagick调整图像大小