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; },
我想要做的是:
- 我从客户端收到一个用户对象。
- 我检查用户是否在MongoDB中
- 如果用户在场,准备响应对象
- 用响应对象响应客户端。
我有1.工作。 然而,它是asynchronous调用,2,3,4的顺序搞砸了。
现在发生什么事情是:
- 接收客户端对象
- 返回响应对象(这是空的)
- 检查芒果
- 准备响应对象。
上面我没有使用Meteor.methods。 我如何以正确的方式进行这项工作? 我已经尝试过绕wrapAsync
和fiber/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; }), // ... }