2

Hi I'm new in this fascinating "programers" world. I started to build some simple page and that forced me to learns some JS and I tried to tame node, but it's... well complicated for me. Could someone explain how to pass data betwen one part of the code to the other part in this asyns world? I tried callbacks, I tried promises to no avail, but maybe I just messing around with something cause it's new new for me?

Original code:

function ok(ifOk){
    console.log(ifOk);
}

function test(doSomeTests){
    console.log(doSomeTests);
}

let req1 = request1('http://www.facebook.com', function(err, resp, content){
    if (resp){
        if(content.indexOf('someUser') !== -1){
            var ifOk = 'ok';
            ok(ifOk);
            var doSomeTests = 'tests';
        }
    }
    else{
        console.log(err);
    }
});

let req2 = request2('http://www.google.com', function(err, resp, content){
    if (resp){
        // how to move do_some_tests here !?
        // I would like to start those 2 request immediately, so req1 is downloading data, req2 is downloading data,
        // and when req1 is finished and req2 is in the place it required the data to move forward - the data (doSomeTests) is passed in - is awailable to use
        test(do_some_test);
    }
    else{
        console.log(err);
    }
});

code with callbacks:

// function after() {
    // setTimeout(function() {
        // console.log('after function - 3 sec setTimeout');
    // }, 3000);
// }

function test(doSomeTests) {
    console.log('doSomeTests is running: ' + doSomeTests);
}

function req1(_cb) {
    request('https://www.facebook.com', function (err, resp, content) {
        if (resp) {
            console.log('req1 in process...');

            if (resp.statusCode === 200) {
                var doSomeTests = 'tests';
                _cb(doSomeTests);
            }
        }
        if (content) {
            console.log('req1 is done!');
        }
        else {
          reject(err);
        }
    });
}

function req2() {
    request('https://www.google.com', function (err, resp, content) {
        if (resp) {
            console.log('req2 in process...');
            // how to move do_some_tests here !?
            // I would like to start those 2 requests immediately, so req1 is downloading data and also req2 is downloading data,
            // and when req1 is finished and req2 is in the place it required the data to move forward - the data (doSomeTests) is passed in - is awailable to use
            req1(test);
            // after();
        }
        if (content) {
            console.log('req2 is done!');
        }
        else {
            console.log(err);
        }
    });
}

req2();

code with request:

// function ok(ifOk) {
    // setTimeout(function() {
        // console.log(ifOk);
    // }, 2000);

// }

// function after(){
    // setTimeout(function(){
        // console.log('after function - 3 sec setTimeout');
    // }, 3000);
// }

function test(doSomeTests) {
  console.log('doSomeTests is running: ' + doSomeTests);
}

function req1() {
  return new Promise((resolve, reject) => {
    request('https://www.facebook.com', function (err, resp, content) {
      if (resp) {
            console.log('req1 in process...');

        if (resp.statusCode === 200) {
          // var ifOk = 'ok';
          // ok(ifOk);
          var doSomeTests = 'tests';
          resolve(doSomeTests);
        }

      }
        if (content) {
            console.log('req1 is done!');
        }
      else {
            reject(err);
      }
    })
  })
}

let req2 = req1().then(do_some_test => {
  request('https://www.google.com', function (err, resp, content) {
    if (resp) {
        console.log('req2 in process...');
      // I would like to start those 2 requests immediately, so req1 is downloading data, req2 is downloading data,
      // and when req1 is finished and req2 is in the place it required the data to move forward - the data (doSomeTests) is passed in - is awailable to use
      test(do_some_test);
        // after();
    }
    if (content) {
        console.log('req2 is done!');
    }
    else {
      console.log(err);
    }
  });
});

Anyway request are not downloading content asynchronously. How to modiffy above code to get result like in comments?

nitroExcel
  • 21
  • 2

0 Answers0