0

そうです

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

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

コンソールは次のようになります

{ '.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 }

しかし、console.log('checkJson:', checkJson); プリント

checkJson: undefined

ここで何が間違っていますか?

4

1 に答える 1

1

return out;からではなく、「完全な」コールバックから返されますcheckUrlcheckUrlすぐに返します(返す前にrest.get)。探している値を取得するには、コールバックを使用する必要があります。

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

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);
    });
};
于 2013-07-10T20:27:39.717 に答える