2014-01-21 77 views
3

將請求的url的主體傳遞給下一個函數我想下載一個html頁面&將它的正文部分轉發到下一個函數。我用步驟來序列化函數。我正在使用請求模塊下載頁面。node.js請求模塊,如何通過步驟

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); 
    } 
    ); 

如果我做​​則整個頁面的數據(響應& HTML)傳遞到下一個功能。

如何將上述代碼更改爲僅將html傳遞給下一個函數?

回答

1

從步驟文檔記住:

它接受任意數量的函數作爲參數,並使用在上下文回調下一步通過運行它們的串行順序。

因此,當每個步驟被​​調用時,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); 
    } 
); 

我的補充是與「< ------」的線。快樂的編碼!