好吧我正在使用一种方法来发出请求并从另一个URL中提取一些表
$ sort -n dat/twenty.txt | uniq -c
3 1
3 2
3 3
4 4
4 5
4 6
4 7
4 8
4 9
4 10
4 11
3 12
2 13
2 14
4 15
4 16
4 17
2 18
2 19
2 20
当调用表中的td成功打印到服务器控制台时:http://prntscr.com/721pjh
Buuut,当该文本从该方法返回到此客户端代码时,Meteor.methods({
gimmetitle: function () {
var url = 'http://wiki.warthunder.com/index.php?title=B-17G_Flying_Fortress';
request(url, function(err, response, body) {
$ = cheerio.load(body);
var text = $('.flight-parameters td').text();
console.log(text);
return text;
});
}
});
将打印到控制台:
undefined
想法?
答案 0 :(得分:1)
您需要了解两件不同的事情:
这就是Session.set('gogle', result);
在var avar = Session.get('gogle');
之后实际执行的原因,即使它出现在事件处理程序代码流之前。
Session
变量设置为方法的结果时,不会使用新值{{自动重新执行事件处理程序代码1}}。您需要在Meteor方法回调中对结果执行某些操作,或者根据Session.get('gogle')
使用反应计算(模板帮助程序或Tracker.autorun),以便在响应数据源时重新运行已修改,并使用从服务器获取的新值并分配给Session.get('gogle')
变量。
答案 1 :(得分:0)
快速更新..只需1行代码即可修复此问题。
而不是request(url, function(err, response, body)
我使用froatsnook:request包并使用了var result = request.getSync(url, {encoding: null});
,然后将$ = cheerio.load(body);
替换为$ = cheerio.load(result.body);
。