Javascript 这有什么问题?尝试在原型中使用请求回调…但收效甚微
这就是我如何尝试使用Node.js with request和Cheerio从一系列网页中提取一些元素的回调请求。最初,我使用的基本逻辑只不过是一个函数。然而,我正试图使其更加面向对象,显然失败得很惨。由于这种逻辑以前是有效的,我完全搞不懂为什么它现在不起作用 提前感谢您的帮助Javascript 这有什么问题?尝试在原型中使用请求回调…但收效甚微,javascript,node.js,request,cheerio,Javascript,Node.js,Request,Cheerio,这就是我如何尝试使用Node.js with request和Cheerio从一系列网页中提取一些元素的回调请求。最初,我使用的基本逻辑只不过是一个函数。然而,我正试图使其更加面向对象,显然失败得很惨。由于这种逻辑以前是有效的,我完全搞不懂为什么它现在不起作用 提前感谢您的帮助 要点:您的问题之一在这里,第82行: if (!error) { var $ = cheerio.load(body); // get properties from the html this
要点:您的问题之一在这里,第82行:
if (!error) {
var $ = cheerio.load(body);
// get properties from the html
this.name_river.get($);
this.name_reach.get($);
this.difficulty.get($);
this.length.get($);
}
该内部回调函数没有绑定到相同的作用域,因此此
不是Reach
实例
您需要获取一个引用并使用它:
function Reach(reach_id) {
/* ... */
var self = this;
this.request = request(url_root + this.reach_id, function (error, response, body) {
/* ... */
self.name_river.get($);
/* ... */
});
}
。。。或者显式地将其绑定到:
function Reach(reach_id) {
/* ... */
this.request = request(url_root + this.reach_id, (function (error, response, body) {
/* ... */
this.name_river.get($);
/* ... */
}).bind(this));
}
MDN关于此
另一个问题是这里的电话,第104行:
reach.request();
如果我读取正确,请求未设置为函数。第79行在实例创建期间执行请求:
this.request = request(url_root + this.reach_id, function (error, response, body) {
谢谢你花时间看这个。今晚我要看一看。非常感谢您提供的具体建议和参考,帮助我慢慢地(非常缓慢地)了解如何使用Python以外的语言编写代码。这个参考超出了范围,谢谢您的关注。我一直在看我的电脑太久了。然而,第二个问题,如何创建请求回调,我正在努力解决。你会有一个很好的参考或解释吗?另外,我更新了要点以反映这个参考的自我。我不是100%清楚你想对这个请求做什么,你能详细说明吗?