node.js - 当变量在服务器上定义时,Meteor.call 返回 'undefined' 结果

标签 node.js post asynchronous methods meteor

有人可以在我的代码中看到为什么变量 oauthToken 在服务器上定义,但在 Meteor.call 结果中返回给客户端时未定义

我调用电话以在服务器上发起 POST 请求

正文被解析,我将一个值存储到变量 oauthToken

这会在服务器上打印出来,但不会在客户端的“结果”中打印出来

这是因为客户端正在运行模拟吗?我们可以在异步函数中执行“返回”吗?

服务器.js

Meteor.methods({
 getGoodreads: function () { 
 request.post('http://www.goodreads.com/oauth/request_token', {oauth:{
                 consumer_key: '89hdg8pEoMzRdg',
                 consumer_secret: 'dfgdfgHthtdtjtt' }}, function (error, response, body) {
      if (!error && response.statusCode == 200) {
              var a = querystring.parse(body)
              oauthToken = a.oauth_token
              console.log(oauthToken); //prints value i need
              return oauthToken
       }else{
              console.log('there is an error ' + error);
            }
   });
} 
});

客户端.js

Template.profile.events({
    'click #goodreads': function (event) {
        event.preventDefault();
        Meteor.call('getGoodreads', function(error, result) {
            if (error) {
                console.log('this is an error ');
            } else {
                console.log(result); //THIS IS UNDEFINED...possibilities?
            }
        });
    }
 });

最佳答案

使用 future 从异步函数返回值:

var Future = Npm.require("fibers/future")    
Meteor.methods({
     getGoodreads: function () { 
     var f = new Future();
     request.post('http://www.goodreads.com/oauth/request_token', {oauth:{
                     consumer_key: '89hdg8pEoMzRdg',
                     consumer_secret: 'dfgdfgHthtdtjtt' }}, function (error, response, body) {
          if (!error && response.statusCode == 200) {
                  var a = querystring.parse(body)
                  oauthToken = a.oauth_token
                  console.log(oauthToken); //prints value i need
                  return f.return(oauthToken)
           }else{
                  f.throw(error);
                  console.log('there is an error ' + error);
                }
       });
       return f.wait()
    } 
    });

关于node.js - 当变量在服务器上定义时,Meteor.call 返回 'undefined' 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463489/

相关文章:

c# - 在 Web 服务中使用 Task.WhenAny()

javascript - Node.js - 检查字符串是否表示大量元素的有效日期时间的最快方法是什么?

node.js - Docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:296:

c# - ASP.NET HttpWebRequest POST 到站点的问题

php - 通过 Javascript 传递 MySQL 查询

java - 异步方法的问题

javascript - 异步/等待、数据获取和 Unresolved promise

javascript - 我想将数据库中的数据显示到我的jade模板中

node.js - 在 Electron 中禁用 windows 键

php - 带有 FormData 的 XHR 请求正在发布一个空数组,