Meteor如何使用Meteor.wrapAsync与facebook Graph Api

时间:2015-06-01 12:35:13

标签: facebook-graph-api asynchronous meteor

我通过使用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();
}

1 个答案:

答案 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);
  }
}