Hàm trong Nodejs



  • M.n cho hỏi. Mình muốn lấy số trang của trang lazada nhưng
    khi ra ngoài hàm mình gán 1 biến bằng cái hàm laySotrang(url) thì biến đó ko nhận được giá trị số trang.
    Nhưng khi mình console.log() trong hàm chỗ else thì lại lấy ra được số trang...!
    Ảnh dưới là KQ khi mình chạy code.
    Thanks!!
    CODE:
    var a = laySotrang("http://www.lazada.vn/dien-thoai-di-dong/…");
    console.log(a);
    function laySotrang(urlTrang) {
    var kq;
    request(urlTrang, function(error,res,body){
    if(error){
    console.log("Co loi xay ra: ",error);
    }
    else{
    var $ = cheerio.load(body);
    // console.log(kq);
    var ks = $('.c-paging__link').last().text();;
    kq = parseInt(ks);
    console.log("KQ",kq);
    console.log("KS",ks);
    }
    })
    return kq;
    }![alt text](image url)



  • @Bui-Huy

    var a = laySotrang("http://www.lazada.vn/dien-thoai-di-dong/…");
    console.log(a);
    function laySotrang(urlTrang) {
    var kq;
    request(urlTrang, function(error,res,body){
    if(error){
    console.log("Co loi xay ra: ",error);
    }
    else{
    var $ = cheerio.load(body);
    // console.log(kq);
    var ks = $('.c-paging__link').last().text();;
    kq = parseInt(ks);
    console.log("KQ",kq);
    console.log("KS",ks);
    }
    })
    return kq;
    }
    

    Bởi vì request là 1 async function.
    http://www.hongkiat.com/blog/synchronous-asynchronous-javascript/

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien
    Vậy mình muốn lấy ra phải xài callback hả bác?
    Mình newbie nên chưa rành lắm :(



  • @Bui-Huy Thì bạn sẽ phải sử dụng bên trong callback á. Còn muốn lấy ra thì dùng 1 function wrap nó lại cho đến khi có giá trị.
    Mà mình thấy nên đọc JavaScript trước khi làm cái trên. Sẽ xử lí tốt hơn.
    http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

    Bạn đọc bài viết này và tập sài theo nó nè. :)).
    Hoặc dùng thằng này dễ sài hơn nè:
    https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien Cảm ơn bác.



  • @Bui-Huy Không có gì. Cứ tập dần thôi. Vì thật ra JavaScript khó vãi chim ra.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien Mới tập tành gần tuần nay. Chống cả mặc bác à :((((



  • @Nguyen-Hien alo. Bác ơi.Xử lý dùm tôi cái này được không. Làm sao cho ra số trang để đưa vô vòng lập lấy dữ liệu thôi :((
    thanks



  • @Bui-Huy Cái này thì không biết bác ơi =)). Hỏi Lazada ấy.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • Cơ mà thử đoạn code này của mình xem

    ====================================================

    var cheerio = require('cheerio');
    var request = require('request');
    
    var url = 'http://www.lazada.vn/dien-thoai-di-dong/';
    // Get pager
    new Promise(function (resolve, reject) {
        request(url, function (error, res, body) {
            if (error) {
                return reject(error);
            } else {
                var $ = cheerio.load(body);           
                var ks = $('.c-paging__link').last().text();
                return resolve(parseInt(ks));
            }
        });
        // For in here 
    }).then(function (pager) {
        for(var i = 1; i<=pager; i++){
            console.log(i);
        }
    }).catch(function (err) {
        console.log("Co loi xay ra: ", err);
    });
    

    ================================================================

    Ơ mà mình không biết bôi đen cả đoạn code
    Ai đó help cái ?
    Thanks!



  • @Khoa-Lê-Duy said in Hàm trong Nodejs:

    Ơ mà mình không biết bôi đen cả đoạn code

    Là markdown syntax thôi mà. Thêm 3 cái gạch ` ở đầu và cuối block code :))

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    1


  • @Nguyen-Hien Thanks nhé!

    // Mình hai lúa quá :( 
    


  • @Khoa-Lê-Duy Cảm ơn bác nhá. Để mình thử.



  • Nếu body có element bạn select bằng jq thì mới ok, nhiều khi vô trang đó, nhưng trang đó lại dùng một ajax để gọi dữ liệu, phân trang thì bạn phải request tới trang ajax



  • Mà phải xử lý trong callback, hoặc bind một hàm khác nhận callback thì mới ok



  • Cảm ơn mọi người!!


Log in to reply