我正在尝试使用NodeJS获取指定的文件夹名称,其后缀版本号不同,如下所示:
this.getUeeFolderName = function(path)
{
var fileLists = fs.readdirSync(path);
for(var i =0 , l = fileLists.length; i < l ; i++)
{
fileName = fileLists[i];
state = fs.statSync(path+"/"+fileName);
if(state.isDirectory())
{
if(fileName.indexOf('appmw-uee-frontend-') >= 0)
{
return fileName;
}
}
}
};
但它有时会返回&#34; undefined&#34;,有时会返回预期的字符串。
注意:这个文件夹不能为空,因为它是一个tomcat工作目录,我的项目总是在tomcat中运行。
答案 0 :(得分:1)
如果path
是一个空目录,fs.readdirSync(path)
将返回一个空数组([]
)。
在这种情况下,for
循环将运行零次。在这种情况下,运行for
循环作为其最后一步的函数将返回undefined
。 (在这种情况下,return
循环内的for
语句永远不会执行。)
当path
是一个空目录时,可能会发生这种情况。
另一种可能性是if
条件永远不会满足。这也会导致跳过return
语句。因此,如果path
中没有包含appmw-uee-frontend-
作为名称一部分的目录,则该函数也会返回undefined
。
最后一种可能性:代码中存在竞争条件。运行fs.readdirSync()
时可能存在该目录,但在调用fs.statSync()
之前可能会删除或重命名(通过其他进程)。在这种情况下,它不会被返回,你得到undefined
。特别是如果有大量条目要循环,那也可能是正在发生的事情(尽管我建议确认其他可能性不是首先发生的事情)。
答案 1 :(得分:0)
使用String response="<div class=\"row\"><span>some text<pre>% Copyright (c) </pre></span></div>";
String insidePre=response.substring(response.indexOf("<pre>")+4,response.indexOf("</pre>"));
方法而不是使用for循环。它将解决您的问题:
段:
forEach()