流星方法如何返回结果?

时间:2019-01-02 09:47:48

标签: reactjs facebook-graph-api meteor

我正在使用流星/反应来学习Facebook图形api。 我想访问用户在Facebook时间轴上的信息,并将其显示在屏幕上。怎么办?

根据此处[How to perform common FB actions using Meteor?提供的解决方案的指导。我尝试了以下代码:server.js

Meteor.methods({
'seePost' : function(){
  var graph=Npm.require('fbgraph');
  if(Meteor.user().services.facebook.accessToken){
    graph.setAccessToken(Meteor.user().services.facebook.accessToken);
    var future = new Future();
    var onComplete = future.resolver();
    graph.get('/me/feed',function(err,result) {
            console.log(result);
            return onComplete(err,result);
    })
   Future.wait(future);
  }
  else{
    return false;
  }

}
});

客户端代码:     Meteor.call("seePost", function(err,result) { if(err) console.log("error" , err); else console.log("RES", result); });

我希望在客户端控制台中显示结果,因为我想向用户显示其时间轴上的帖子,但是我得到以下输出: RES,未定义

3 个答案:

答案 0 :(得分:1)

您可以使用awaitMeteor.callAsync

基本上,客户端代码等待调用完成,并为您提供返回的数据

const result = await Meteor.callAsync("seePost");

错误应使用try..catch块进行处理

答案 1 :(得分:1)

如果使用光纤/期货,则需要返回带有“期货”的东西。

const future = new Future();
// some code getting result or something 
future.return(something);
return future.wait();

这将在客户端调用的回调中返回某些内容。

答案 2 :(得分:1)

尝试此代码,当您使用光纤时,您需要“等待”响应

Meteor.methods({
  'seePost': function () {
    var graph = Npm.require('fbgraph');
    if (Meteor.user().services.facebook.accessToken) {
      graph.setAccessToken(Meteor.user().services.facebook.accessToken);
      var future = new Future();
      var onComplete = future.resolver();
      graph.get('/me/feed', function (err, result) {
        console.log(result);
        if (err) {
          return future.return(false);
        } else {
          return future.return(result);
        }
      })
      return future.wait();
    }
    return false;
  }
});