有人可以在我的代码中看到为什么变量 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/