我想下载一个html页面&将它的身体部分转发到下一个功能。我用step来序列化这些函数。我正在使用请求模块下载页面。
var Step = require('step');
var request = require('request');
Step(
function getHtml() {
if (err) throw err;
var url = "my url here";
request(url, function (error, response, html) {
// i want to pass the html object to the next function view
});
},
function view(err, html) {
if (err) throw err;
console.log(html);
}
);
如果我request(url, this)
,那么它将整个页面数据(响应和HTML)传递给下一个函数。
如何将上述代码更改为仅将html传递给下一个函数?
答案 0 :(得分:1)
请记住Step文档:
它接受任意数量的函数作为参数,并使用在此上下文中传递的顺序运行它们作为下一步的回调。
因此,当每个步骤被调用时,this
是您回调下一步的步骤。但是,您正在使用request
来电进行回调,因此this
会在此时发生变化。所以,我们只是缓存它。
var Step = require('step');
var request = require('request');
Step(
function getHtml() {
//if (err) throw err; <----- this line was causing errors
var url = "my url here"
, that = this // <----- storing reference to current this in closure
request(url, function (error, response, html) {
// i want to pass the html object to the next function view
that(error,html) // <----- magic sauce
});
},
function view(err, html) {
if (err) throw err;
console.log(html);
}
);
我添加的内容是“&lt; ------”。快乐的编码!