2015-11-14 80 views
0

蔭試圖運行裏面nightmarejs evalute功能...外部函數正如你可以看到下面我的代碼...如何更新全局對象

function get_my_links(url){ 
    vo(function*() { 
    var nightmare = Nightmare();  
    var href_link = []; // i have tried making it as global without var but did not work 
    var title = yield nightmare 
    .goto('https://examply/'+url) 
    .evaluate(function (href_link,url,get_my_links) { 
     $('.myclass').each(function() { 
      href_link.push($(this).attr("href")); 
     }); 
     if($.isNumeric($("#someid").val())) 
     { 
      get_my_links(1) 
     } 
     else{ 
      return href_link; 
     } 
    },href_link,url); 
    console.log(title); 
    yield nightmare.end(); 
    })(function (err, result) { 
    if (err) return console.log(err); 
    }); 
} 

get_my_links(0) 

通過上面的代碼中,我試圖更新href_link .. 1)如何使它成爲Global對象,這樣每次調用函數的新值都應該與現有值一起添加?

+0

根據代碼註釋,您嘗試不添加var,只需嘗試用'var href_link = [];聲明; '在函數之外,然後'函數get_my_links(url)' – rajuGT

+0

試圖在外面添加它......但'evaluate'檢測爲未定義的'href_link' –

+0

爲什麼不使用局部變量並將其作爲參數提供給'callback'函數?它不適合你,可能是因爲它是一個異步調用,並且全局變量沒有立即更新。 – activatedgeek

回答

2

一號的原因 // i have tried making it as global without var but did not work 是不是因爲工作,雖然你做的對象全球化,但每次調用get_my_links功能時,它會更新全局對象空數組。

對於您的用例,在定義get_my_links函數之前定義href_link。 >

function get_my_links() { 
... 
} 
var href_link =[]; 

將拋出內部get_my_links功能href_link的不確定值的誤差由於吊裝必須是已在上述評論中提及的情況下 - 就像

var href_link =[]; 
function get_my_links() { 
... 
} 

後函數定義,就像定義href_link。