node.js请求模块,如何使用step将请求的url体传递给下一个函数

时间:2014-01-21 10:52:29

标签: node.js

我想下载一个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传递给下一个函数?

1 个答案:

答案 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; ------”。快乐的编码!