我一直试图使这个功能同步.我已经阅读了几篇关于Async的Stack Overflow帖子,但是我无法理解我是如何能够实现这种同步的.截至目前,它是异步的,因此它在进入回调函数之前返回undefined.
我从客户端调用它:
- Meteor.call('screenName',function(error,result) {
- if (error) {
- console.log(error);
- }
- else {
- window.alert(result);
- }
- }
这是服务器端方法:
- Meteor.methods({
- 'screenName': function() {
- T.get('search/tweets',{
- q:'#UCLA',count:1
- },function(err,data,response) {
- var temp = data.statuses[0].user.screen_name;
- console.log(temp);
- return temp;
- }
- )
- }
- });
我正在使用Twitter API,我想要做的基本上是从JSON中检索屏幕名称并将其返回到客户端的变量.但这是返回undefined因为回调是在编译器到达’screenName’函数结束后编译的.
解决方法
只需使用
Meteor.wrapAsync
将异步T.get转换为同步风格的!
它实际上不会以纯粹的“同步”方式执行,它使用的是一种称为光纤的技巧,但您应该阅读文档以了解更多信息.
开始:
- var Tget = Meteor.wrapAsync(T.get);
- Meteor.methods({
- 'screenName': function() {
- return Tget({
- q : '#UCLA',count : 1
- }).status[0].user.screen_name;
- }
- });