0

[编辑] 这是一个特定于流路由器的问题,我在这里开始了一个问题: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,,updateremove方法。无论是从客户端还是从服务器调用,我都不确定。真的让我很困惑...

当该方法被调用客户端时,它可以工作。

[ 编辑 ]

我试图解除阻塞和 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();
},
4

0 回答 0