简体   繁体   中英

Javascript: method returns undefined when value is not undefined

I do

if (program.url) {
        checkJson = checkUrl(program.url, program.checks);
        console.log('checkJson:', checkJson);
    }

and

var checkUrl = function (url, checksfile) {
    var checks = loadChecks(checksfile).sort();
    rest.get(program.url).on('complete', function(data) {
        var out = {};
        $ = cheerioUrlData(data);
        for (var ii in checks) {
            var present = $(checks[ii]).length > 0;
            out[checks[ii]] = present;
        }
        console.log(out); // <<-- This console
        return out;
    });
};

The console looks like

{ '.about': true,
  '.blank': true,
  '.faq': true,
  '.footer': true,
  '.heading': true,
  '.logo': true,
  '.navigation': true,
  '.order': true,
  '.pitch': true,
  '.section1': true,
  '.section2': true,
  '.social': true,
  '.subheading': true,
  '.thermometer': true,
  '.video': true,
  h1: true }

but console.log('checkJson:', checkJson); prints

checkJson: undefined

What is incorrect here?

return out; returns from your "complete" callback and not from checkUrl . checkUrl returns immediately (before the rest.get returns). You need to use a callback to get the value you are looking for:

if (program.url) {
       checkUrl(program.url, program.checks, function(result) {
            console.log(result);
       } );
}

and

var checkUrl = function (url, checksfile, callback) {
    var checks = loadChecks(checksfile).sort();
    rest.get(program.url).on('complete', function(data) {
        var out = {};
        $ = cheerioUrlData(data);
        for (var ii in checks) {
            var present = $(checks[ii]).length > 0;
            out[checks[ii]] = present;
        }
        console.log(out); // <<-- This console
        callback(out);
    });
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM