NodeJS返回" undefined"获取文件夹名称时

时间:2016-08-18 02:22:42

标签: node.js protractor

我正在尝试使用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中运行。

2 个答案:

答案 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()