流星异步方法调用

时间:2016-02-24 10:09:35

标签: meteor

我对流星很新,我在Meteor.methods中有一个方法,如:

sendStory(story) {

    HTTP.call("GET", "https://offline-news-api.herokuapp.com/stories", function(error, response){
      if(error){
        console.log("error")
      }else{
        console.log(response)
        var story = story
        return story
      }
    })
  }

然后我在我的cliet上调用它,如:

Meteor.call('sendStory', this.story, function(res){
        console.log("some story")
        console.log(res)
      })

此处不会打印res给出的undefined值,并且最后会调用api。

如何先进行api通话,然后从api

转到callback

谢谢..

3 个答案:

答案 0 :(得分:1)

那么,

不要像这样使用http调用回调:

sendStory(story) {
 var story = HTTP.call("GET", "https://offline-news-api.herokuapp.com/stories");
 return story;
}

请参阅Meteor Docs

由于Meteor方法在光纤内运行,因此无法从回调中返回。

答案 1 :(得分:0)

你可以使用未来:

sendStory(story) {

    Future = Npm.require('fibers/future');
    var apiFuture = new Future();

    HTTP.call("GET", "https://offline-news-api.herokuapp.com/stories", function(error, response){
        if(error){
            console.error("Error: ", error);
            apiFuture.throw(error);
        }else{
            console.log("Response: ", response);
            apiFuture.return(response);
        }
    });

    return apiFuture.wait();
}

并在客户端:

Meteor.call('sendStory', this.story, function(err, res){
    console.log("some story");
    if (err) {
        console.error(err);
    } else {
        console.log("Great! A response from the API: ", res);
    }
});

答案 2 :(得分:0)

与提到的guns类似,您将从服务器方法返回undefined。该方法不等待异步函数终止。而是返回。

在服务器中,我总是采用同步方法。