我通过使用fiber / future解决了Graph Api异步请求,它允许在预定义的时间后给出函数结果,这个解决方案的缺点是当facebook发送响应的速度超过1000ms时它还会等待。
有没有办法让服务器端功能在响应到来后立即返回图形api结果?我发现 Meteor.wrapAsync 可能会有所帮助,但我不确定我的语法是否正确。
这就是我使用光纤所做的工作,而且工作时间恰到好一秒。
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();
}
答案 0 :(得分:2)
使用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);
}
}