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;
},
我试图做的是:
- 我收到一个用户对象从客户端。
- 我检查用户是否存在于所述的mongodb
- 如果用户在场,准备响应对象
- 响应与该响应对象客户端。
我有1.工作。然而,它是异步调用,2,3,4的顺序搞砸了。
眼下发生的事情是:
- 收到客户对象
- 返回响应对象(里面是空的)
- 检查蒙戈
- 准备响应对象。
我没有使用上面的Meteor.methods。 如何以正确的方式完成这项工作?我试过在wrapAsync
和fiber/future
周围玩耍,但都是死路一条。
为什么你使用'Fiber'上面的代码? '.findOne'已经同步。如果不使用“Fiber”,你会看到错误吗? – Khang
由于我运行Meteor.methods之外的代码,因此我需要将其包装在Fiber中。否则我得到一个错误,说Meteor需要使用光纤运行。 – blueren