2016-11-29 11 views
1

私はvpulim:node-soapを使って石鹸サーバーを稼働させています。流星群サーバの非同期関数

マイ流星サーバーの起動は、様々な他のコードの中で、これを含んでいます。私は何をしようとしている

authRequestOperation: function(args,cb,headers,req) { 
     console.log(args); 
     var authResponceObject = {}; 
     var futureAuthResponse = new Future(); 
     Fiber(function(){ 
     if(collectorUsers.findOne({username: args.username})){ 
      console.log("Found User"); 
      authResponceObject = { 
      username: args.username, 
      nonce: Random.id() 
      }; 
      console.log("authResponceObject is: " + JSON.stringify(authResponceObject,null,4)); 
      console.log("futureAuthResponse returning..."); 
      futureAuthResponse.return(authResponceObject); 
     } 
     // console.log("futureAuthResponse waiting..."); 
     // return futureAuthResponse.wait(); 


     }).run(); 
     console.log("authResponceObject after fiber is: " + JSON.stringify(authResponceObject,null,4)); 
     return authResponceObject; 
    }, 

は次のとおりです。

  1. 私は、クライアントからユーザーオブジェクトを受け取ります。
  2. Iユーザーが存在する場合、ユーザはMongoDBの
  3. に存在しているかどうかを確認、応答オブジェクト
  4. は応答オブジェクトを使用してクライアントに応答する準備。

私は1.働いています。しかし、それは非同期呼び出しであるため、2,3,4の順序が乱れてしまいます。今何が起こっているか

は次のとおりです。

  1. チェックモンゴ
  2. は、レスポンスオブジェクトを準備します(空である)クライアントオブジェクト
  3. リターン応答オブジェクト
  4. を受けます。

私は上記にMeteor.methodsを使用していません。 この作業を適切な方法で行うにはどうすればよいですか?私はwrapAsyncfiber/futureの周りをジャグリングしようとしましたが、行き止まりになりました。

+0

? '.findOne'はすでに同期しています。 'Fiber'を使わないとエラーが出ますか? – Khang

+0

Meteor.methods以外でコードを実行しているので、ファイバーでラップする必要があります。そうでなければ、流星がファイバーで走る必要があるというエラーが出ます。 – blueren

答えて

1

私はMeteor.bindEnvironmentは、このコードを試してみてください、あなたの問題を解決できると信じて:あなたは上記のコード内で `Fiber`を使用しないのはなぜ

{ 
    // ... 
    authRequestOperation: Meteor.bindEnvironment(function(args, cb, headers, req) { 
    console.log(args); 
    var authResponceObject = {}; 

    if (collectorUsers.findOne({username: args.username})) { 
     console.log("Found User"); 
     authResponceObject = { 
     username: args.username, 
     nonce: Random.id() 
     }; 
     console.log("authResponceObject is: " + JSON.stringify(authResponceObject, null, 4)); 
    } 


    return authResponceObject; 
    }), 
    // ... 
} 
+0

これはトリックでした。ありがとう。 – blueren

関連する問題