【问题标题】:JavaScript: out of scope variable leads to an errorJavaScript:超出范围变量导致错误
【发布时间】:2022-11-17 19:24:19
【问题描述】:

一个相当原始的问题,但我找不到解决方法:

我在这个范围内启动了一个数组,我需要将一个对象从 JSON(从 XML 转换而来)推送到一个数据数组,该数组在一个循环中收集数据,然后我只需要返回响应范围,因为在范围内它还没有满。

我如何解决这个相当原始的问题?

我的最小示例如下所示:

{
...
dataarr.push(jsonObj['soap:Envelope']['soap:Body']['ns:Response']['return']['items']);
} // scope 1 ends here
res.status(200).send(dataarr); // out of scope in this scope 2 the response has to be sent back to the client

我收到错误是因为变量超出了范围,我该如何解决这个问题?

更新 1

更多代码:

let dataarr = [];

let payloadarr = [];
...
axios(config)
.then(function (response) {
 logger.log('info', 'POST /getdata successful from ' + req.ip);
 var options = {
   attributeNamePrefix : "@_",
   attrNodeName: "attr", //default is 'false'
   textNodeName : "#text",
   ignoreAttributes : true,
   ignoreNameSpace : false,
   allowBooleanAttributes : false,
   parseNodeValue : true,
   parseAttributeValue : false,
   trimValues: true,
   cdataTagName: "__cdata", //default is 'false'
   cdataPositionChar: "\\c",
   parseTrueNumberOnly: false,
   arrayMode: false, //"strict"
   attrValueProcessor: (val, attrName) => he.decode(val, {isAttributeValue: true}),//default is a=>a
   tagValueProcessor : (val, tagName) => he.decode(val), //default is a=>a
   stopNodes: ["parse-me-as-string"]
 };
 console.log("response.data:");
 console.log(response.data);
 if( parser.validate(response.data) === true) { //optional (it'll return an object in case it's not valid)
 var jsonObj = parser.parse(response.data,options);
}

var tObj = parser.getTraversalObj(response.data,options);
var jsonObj = parser.convertToJson(tObj,options);
console.log("jsonObj in parsing:");
console.log(jsonObj);
console.log(jsonObj['soap:Envelope']['soap:Body']['ns:getResponse']['return']['items']);
dataarr.push(jsonObj['soap:Envelope']['soap:Body']['ns:getResponse']['return']['items']);
console.log("dataarr getting filled:");
console.log(j);
console.log(dataarr);
})
.catch(function (error) {
  logger.warn('[/getdocumentmetadata]: ', new Error(error));
  //console.log(error);
});
}
})
.catch(function (error) {
  logger.warn('[GET /getdocuments]: ', new Error(error));
});
res.status(200).send(dataarr);
});

【问题讨论】:

    标签: javascript node.js express scope var


    【解决方案1】:

    您是否在 if 或其他之外创建 dataarr ?

    没有代码它很复杂但是我可以阅读我猜你有类似的东西

    if (something) {
      const dataarr = []
    
      ...
      dataarr.push(jsonObj['soap:Envelope']['soap:Body']['ns:Response']['return']['items']);
    }
    res.status(200).send(dataarr);
    

    你应该做

    const dataarr = []
    
    if (something) {
      ...
      dataarr.push(jsonObj['soap:Envelope']['soap:Body']['ns:Response']['return']['items']);
    }
    res.status(200).send(dataarr);
    

    如果没有,你能带来一些细节吗?

    【讨论】:

    • 正如我所见,这显然已经是这种情况,但我将添加一些代码来检查它。问题是代码就像 200 多行代码,所以我只添加相关部分。
    • 更新了问题^^
    • 并回答你的问题 - 没有 if 条件,而是 for 循环..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多