代码之家  ›  专栏  ›  技术社区  ›  jfernal

节点。js在加载其他函数之前等待初始化变量

  •  1
  • jfernal  · 技术社区  · 6 年前
    request('GET', url_ws).done((res) => {
      if (res.statusCode==200) {
        parseString(res.getBody(),{explicitArray:false}, function (err, result) {
            pdfAnnotations=result['root']['element'];
            console.log(pdfAnnotations);//show value//second
        });
       }
    });
    console.log(pdfAnnotations);//display "undefined"//first
    fn_work(pdfAnnotations)
    

    您好,我必须使用从web服务加载的变量,但当我的函数启动时,变量是“未定义的”

    2 回复  |  直到 6 年前
        1
  •  0
  •   ralphtheninja    6 年前

    您需要调用函数 之后 parseString() 已完成:

    request('GET', url_ws).done(res => {
      if (res.statusCode == 200) {
        parseString(res.getBody(), { explicitArray: false }, function (err, result) {
          const pdfAnnotations = result['root']['element']
          doSomething(pdfAnnotations)
        })
       }
    })
    
        2
  •  0
  •   Taki    6 年前

    这是正常的,因为代码是异步执行的,它使 request 然后执行 fn_work 之后,从 url_ws ,然后当它获取数据时,它将继续 ParseString 等等

    最简单的方法是移动 fn_work(pdfAnnontaions) 分析字符串 就像这样

    request('GET', url_ws).done((res) => {
      if (res.statusCode==200) {
        parseString(res.getBody(),{explicitArray:false}, function (err, result) {
            pdfAnnotations=result['root']['element'];
            fn_work(pdfAnnotations);
        });
       }
    });
    

    我建议使用承诺或 async/await ,请查看以下内容:

    https://blog.risingstack.com/mastering-async-await-in-nodejs/

    https://www.valentinog.com/blog/http-requests-node-js-async-await/#Making_HTTP_requests_with_Nodejs_the_request_module