met*_*uzz 2 methods post asynchronous node.js meteor
有人可以在我的代码中看到为什么变量oauthToken在服务器上定义但在Meteor.call的结果中返回到客户端时未定义
我打电话在服务器上发起一个帖子请求
解析了正文,并将值存储到变量oauthToken中
这打印在服务器上,但不会在我的'结果'中打印出客户端
这是因为客户端正在运行模拟吗?我们可以在异步函数中执行"返回"吗?
Server.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);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
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?
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
使用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()
}
});
Run Code Online (Sandbox Code Playgroud)