meteor服务器中的asynchronousfunction

我正在使用vpulim:node-soap来运行soap服务器。

我的meteor服务器启动包含其中各种其他代码:

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.工作。 然而,它是asynchronous调用,2,3,4的顺序搞砸了。

现在发生什么事情是:

  1. 接收客户端对象
  2. 返回响应对象(这是空的)
  3. 检查芒果
  4. 准备响应对象。

上面我没有使用Meteor.methods。 我如何以正确的方式进行这项工作? 我已经尝试过绕wrapAsyncfiber/future但打到死angular。

我相信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; }), // ... }