我是Node js的初学者,我正在使用pure node.js做一个简单的项目。 所以这是我的代码:
if(req.url ==="/"&&req.method==="POST"){
let reqBody = "";
req.on('data', chunk=>{
reqBody += chunk.toString();
});
req.on("end", ()=>{
reqBody = reqBody.split("&");
for(let i=0; i<reqBody.length; i++){
reqBody[i]=reqBody[i].split("=");
reqBody[i] = reqBody[i][1];
};
//filter country
let countryFound;
if(reqBody[1].length>0){
let countryList = "";
let countryVal = [];
countryListStream = fs.createReadStream("./public/country.list.json", "UTF-8");
countryListStream.on("data", countryChunk=>{
countryList+=countryChunk;
countryChunk = JSON.parse(countryChunk);
countryFound = countryChunk.filter(elem=> elem["name"].toLowerCase()==reqBody[1].toLowerCase());
if(countryFound.length!==0){
countryListStream.destroy();
};
});
countryListStream.on("end", ()=>{
countryFound = "Not Found"
});
};
});
};
我的问题在“过滤器国家/地区”注释下方: 当我在“ countryListStream”事件之外记录“ countryFound”变量时,它显示未定义。但是当我在事件内记录它时,它显示我想要的。我认为这是因为如何制作了node.js,但是如果它是未定义的,我不知道继续我的代码。 我认为我需要包含一个代码,该代码要等到变量更新后才能运行其余代码。 我在if语句之后尝试了此操作,但并没有解决它:
if(countryFound!===undefined){
console.log(countryFound);
}
答案 0 :(得分:0)
通过查看文档,调用countryStream.destroy()
会发出close
和error
事件。因此,将处理程序添加到close
事件中是有意义的,您可以在该事件中继续处理已分配给这些变量的值:
countryStream.on('close', () => {
console.log(countryFound) // should not be undefined now
// ...do something with your new values
});