1

vpulim:node-soapを使用して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. ユーザーがmongodbに存在するかどうかを確認します
  3. ユーザーが存在する場合は、応答オブジェクトを準備します
  4. 応答オブジェクトでクライアントに応答します。

1. 働いています。ただし、非同期呼び出しなのに、2,3,4 の順番がめちゃくちゃ。

現在起こっていることは次のとおりです。

  1. クライアントオブジェクトを受け取る
  2. 応答オブジェクトを返します (空です)
  3. モンゴをチェック
  4. 応答オブジェクトを準備します。

上記にはMeteor.methodsを使用していません。これを正しい方法で機能させるにはどうすればよいですか?私はジャグリングを試みましwrapAsyncfiber/futureが、行き止まりにぶつかりました。

4

1 に答える 1

1

私はあなたの問題を解決できると信じていMeteor.bindEnvironmentます、このコードを試してください:

{
  // ...
  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;
  }),
  // ...
}
于 2016-11-30T01:39:28.597 に答える