我一直在使用bash中的这个Wikipedia node module,我在保存对变量的响应方面遇到了一些麻烦。我可以使用console.log(response)
来查看完整的响应,但我不能让它坚持变量。
我试过看一下响应的类型,但它只返回undefined。有什么想法吗?
var wikipedia = require("node-wikipedia");
wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
console.log(typeof response);
});
理想情况下,我想将具有html对象的响应分配给变量,然后使用cheerio通过jQuery选择器获取html对象的片段,但我相信我至少需要将其放入首先是变量,对吧?
这是回复的一部分。
{ title: 'Clifford Brown',
redirects: [],
text: { '*': '<div class="hatnote">For the scrutineer for the Eurovision Song Contest, see <a href="/wiki/Clifford_Brown_(scrutineer)" title="Clifford Brown (scrutineer)">Clifford Brown (scrutineer)</a>.
修改/修复
我能够根据@ idbehold的评论让它工作。一切都需要在回调中完成,所以不是在请求之后调用变量,而是在回调中返回它,这样就可以访问函数外部的变量了。
var wikipedia = require("node-wikipedia");
var data;
wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
data = response;
})
答案 0 :(得分:0)
StackOverflow上出现了很多这类问题,而这些问题都源于不了解AJAX的异步性质。您的代码不会在.data()
调用时阻止等待服务器响应。在该调用之后运行的任何代码行将立即运行,而回调函数中的代码将在从服务器返回数据之后的某个时间点运行。为响应获取数据而做的任何事情都必须在回调中发生。
var wikipedia = require("node-wikipedia");
wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
console.log(typeof response);
// do something with the response here
});
// any code here will run before the above callback is invoked.
// don't try to do anything with the response here.