我对流星很新,我在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
谢谢..
答案 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。该方法不等待异步函数终止。而是返回。
在服务器中,我总是采用同步方法。