【问题标题】:Meteor how to use Meteor.wrapAsync with facebook Graph ApiMeteor 如何将 Meteor.wrapAsync 与 facebook Graph Api 一起使用
【发布时间】:2015-06-01 20:41:19
【问题描述】:

我通过使用 fiber/future 解决了 Graph Api 异步请求,它允许在预定义的时间后给出函数结果,这个解决方案的缺点是当 facebook 发送响应的速度超过 1000 毫秒时,它无论如何都会等待。

有没有办法让服务器端函数在响应到来后立即返回图形 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();
}

【问题讨论】:

    标签: facebook-graph-api asynchronous meteor


    【解决方案1】:

    使用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] } 异常......知道为什么吗? @saimeunt 吗?作者?
    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2016-01-30
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多