【问题标题】:How to update global object如何更新全局对象
【发布时间】:2016-02-16 03:35:57
【问题描述】:

我正在尝试在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) 如何使其成为全局对象,以便每次调用函数时都应在现有值中添加新值?

【问题讨论】:

  • 根据代码 cmets,您尝试不添加 var,只需尝试在函数外使用 var href_link = []; 声明然后 function get_my_links(url)
  • 尝试将其添加到外部...但evaluate 检测为未定义href_link
  • 为什么不使用局部变量并将其作为参数提供给callback 函数?它对你不起作用可能是因为它是一个异步调用并且全局变量没有立即更新。

标签: javascript jquery node.js electron nightmare


【解决方案1】:

第一个原因 // i have tried making it as global without var but did not work 不起作用,因为尽管您使对象成为全局对象,但每次调用 get_my_links 函数时,它都会将全局对象更新为空数组。

对于您的用例,在定义 get_my_links 函数之前定义 href_link。喜欢

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

在函数定义之后定义 href_link ->

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

由于提升,会在 get_my_links 函数中抛出未定义的 href_link 值错误,这一定是您在上面评论中提到的情况。

【讨论】:

    【解决方案2】:

    electron 使用 node.js,所以可以使用 node.js 的全局对象来存储值。

    https://nodejs.org/api/globals.html#globals_global

    当您使用此解决方案时,您应该能够从应用的其他部分访问该值。

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多