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