2013-07-10 59 views
0

我做的Javascript:當值不是未定義的方法返回undefined

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 

這裏有什麼不正確?

+6

它是異步的? – adeneo

+0

'checkUrl'沒有返回值......你爲什麼期望返回值不是'undefined'? – Ian

+0

它立即返回**。它沒有時間獲得信息。當它發生時,它會調用回調。 – Paul

回答

1

return out;從您的「完整」回調而不是從checkUrl返回。 checkUrl立即返回(在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); 
    }); 
}; 
+0

我從來不知道這件事,謝謝!我可以在哪裏瞭解更多關於此? – daydreamer

+0

@daydreamer從來不知道什麼? 「return」語句如何工作?或者如何調用函數? – Ian

+0

如何使用異步和回調 – daydreamer

相關問題