Facebook graph api Meteor如何将Meteor.wrapAsync与facebook Graph Api结合使用
我使用fibers/future解决了Graph Api异步请求,它允许在预定义的时间后给出函数结果,这个解决方案的缺点是facebook发送响应的速度超过1000毫秒,它无论如何都会等待 有没有办法让服务器端函数在响应到来后立即返回graph api结果?我发现Meteor.wrapAsync可能会有所帮助,但我不确定我是否正确理解了它的语法 这是我用光纤做的,它只工作了一秒钟Facebook graph api Meteor如何将Meteor.wrapAsync与facebook Graph Api结合使用,facebook-graph-api,asynchronous,meteor,Facebook Graph Api,Asynchronous,Meteor,我使用fibers/future解决了Graph Api异步请求,它允许在预定义的时间后给出函数结果,这个解决方案的缺点是facebook发送响应的速度超过1000毫秒,它无论如何都会等待 有没有办法让服务器端函数在响应到来后立即返回graph api结果?我发现Meteor.wrapAsync可能会有所帮助,但我不确定我是否正确理解了它的语法 这是我用光纤做的,它只工作了一秒钟 function graphGet(query){ var response = new Future()
function graphGet(query){
var response = new Future(); // wait for async FB response
var waitingTime = 1000;
var graphResponse = "no result after: " + waitingTime + "ms";
FBGraph.get(query, function(error, response) {
if (response) { graphResponse = response; }
else { graphResponse = error; }
});
setTimeout(function() {
response['return'](graphResponse);
}, waitingTime);
return response.wait();
}
使用Meteor.wrapAsync的相同代码要短得多:
function graphGet(query){
// wrap the async func into a FBGraph bound sync version
var fbGraphGetSync = Meteor.wrapAsync(FBGraph.get, FBGraph);
// use a try / catch block to differentiate between error and success
try{
var result = fbGraphGetSync(query);
return result;
}
catch(exception){
console.log(exception);
}
}
完美的用你的WrapAsync解决方案替换了我基于光纤的函数,现在它会在facebook响应时立即给出结果。[更新]添加了回调功能,更改为
graphGet(query,callback)
并添加if(callback){callback()}代码>返回之前。我尝试在服务器端按原样使用它,但总是得到一个:{stack:[Getter]}异常。。。知道为什么吗@赛蒙特?作者