node.js在加载其他函数之前等待初始化变量

时间:2018-03-13 23:59:10

标签: javascript node.js rest api initialization

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服务加载的变量,但是当我的函数启动时,变量是'undefined'

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是正常的,因为代码是异步执行的,它会生成request然后执行fn_work,然后从url_ws获取数据,然后获取数据时,它会移至ParseString,依此类推,

简单的方法是将fn_work(pdfAnnontaions)移到ParseString的回调中,如此

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

我建议使用promises或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