流星服务器中的异步功能
Async functions in meteor server
我正在使用 vpulim:node-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. 工作。但是由于是异步调用,2,3,4的顺序乱了。
现在发生的事情是:
- 接收客户端对象
- return 响应对象(为空)
- 勾选mongo
- 准备响应对象。
我没有为上述使用 Meteor.methods。
我如何以正确的方式进行这项工作?我试过在 wrapAsync
和 fiber/future
之间玩杂耍,但遇到了死胡同。
我相信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;
}),
// ...
}
我正在使用 vpulim:node-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. 工作。但是由于是异步调用,2,3,4的顺序乱了。
现在发生的事情是:
- 接收客户端对象
- return 响应对象(为空)
- 勾选mongo
- 准备响应对象。
我没有为上述使用 Meteor.methods。
我如何以正确的方式进行这项工作?我试过在 wrapAsync
和 fiber/future
之间玩杂耍,但遇到了死胡同。
我相信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;
}),
// ...
}