[编辑] 这是一个特定于流路由器的问题,我在这里开始了一个问题:https ://github.com/meteorhacks/flow-router/issues/205我不知道这是一个实际问题还是我构想了错误道..
在服务器启动代码中调用时,Blog.findOne() 返回一个值(服务器端)
Meteor.startup( function () {
console.log( Blog.findOne() );
// one blog post
} );
但是当从服务器调用在服务器方法中调用时,它返回undefined
Meteor.methods( {
getHomeData() {
console.log( Blog.findOne() );
//undefined
怎么回事?
它被称为经典方式:
Meteor.call( 'getHomeData', ( err, res ) => {
console.log( 'server call err :' + err );
console.log( 'server call res :' + res );
} );
服务器和客户端的调用代码相同。
我尝试过类似的事情:
let test = () => {
return Blog.findOne();
};
Meteor.startup( function () {
console.log( test() );
// still good
} );
Meteor.methods( {
getHomeData: () => {
console.log( test() );
// still undefined WTF!
那么,这里有什么我不明白的地方?
顺便说一句,我可以insert
,,update
和remove
方法。无论是从客户端还是从服务器调用,我都不确定。真的让我很困惑...
当该方法被调用客户端时,它可以工作。
[ 编辑 ]
我试图解除阻塞和 wrapAsync (是的,我正在尝试任何事情......)
getHomeData() {
this.unblock();
console.log( 'startCall' );
return Meteor.wrapAsync( () => {
console.log( 'start async call' );
console.log( Blog.findOne()._id );
return Blog.findOne()._id;
} )();
},
从客户端调用时仍然有效,从服务器调用时仍然返回未定义(Blog.findOne()
return undefined
,因此调用返回错误)。
我能看到的唯一区别是来自客户端的呼叫有 athis.connection
和 no this.randomSeed
。
保持客户端工作的Future
方式,但不是服务器端:
Future = Npm.require( 'fibers/future' );
...
getHomeData( v ) {
this.unblock();
var myFuture = new Future();
( () => {
myFuture.return( Blog.findOne()._id );
} )();
return myFuture.wait();
},