【发布时间】:2015-12-11 21:15:53
【问题描述】:
有人可以在我的代码中看到为什么变量 oauthToken 是在服务器上定义的,但在 Meteor.call 的结果中返回给客户端时却没有定义
我打电话在服务器上发起一个发布请求
正文被解析,我将一个值存储到变量 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);
}
});
}
});
client.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?
}
});
}
});
【问题讨论】:
-
方法是否只定义在服务器上?如果我没记错的话,必须在客户端和服务端都定义
-
只有当您想要延迟补偿时,上述情况才可能成立
-
服务器请求是异步的,所以方法实际上是立即返回的。这看起来像是 this question 的副本。
-
您最好将请求的结果放入发布中,然后在客户端订阅发布。
标签: node.js post asynchronous methods meteor