【问题标题】:How to return the array after push in javascriptjavascript推入后如何返回数组
【发布时间】:2021-05-23 07:50:55
【问题描述】:

下面是搜索关键字并返回数组中路径的函数, 函数有效,但返回相同的数组,附加路径不返回, 请问如何返回结果,

module.exports.getFilesRecursively = function (directory) {
    return new Promise(async function (resolve, reject) {
      try {
          const filesInDirectory = fs.readdirSync(directory);
          var result=[1,2];
          for (const file of filesInDirectory) {
              const absolute = path.join(directory, file);
              if (fs.statSync(absolute).isDirectory()) {
                _this.getFilesRecursively(absolute);
              } else {
                   fs.readFile(absolute, function (err, data) {
                      if (err) throw err;
                      if (data.indexOf('TODO') >= 0) {
                        result.push(absolute);
                        console.log(result)// returns [1,2,"file1.js", "file2.js"]
                      }
                  });
              }
           }
           resolve(result); // but returns [1, 2]
      }
      catch (err) {
        reject(err);
      }
    })
  }

【问题讨论】:

    标签: javascript node.js arrays reactjs object


    【解决方案1】:

    您必须将 resolve(result) 放入带有 if 条件的 readFile 的回调中。

    有点像改变

    if (data.indexOf('TODO') >= 0) {
        result.push(absolute);
    }
    

    进入

    if (data.indexOf('TODO') >= 0) {
        result.push(absolute);
        if (result.length === 4) {
            resolve(result)
        }
    }
    

    我希望它有效。

    【讨论】:

      【解决方案2】:

      fs.readFile 是一个异步函数,会立即返回,并将并行工作。因此,在读取文件时,循环也会继续并且可能会更快。因此,resolve 将在文件仍在读取时被调用。
      由于您已经使用了async, await,您可以轻松地重构您的代码并在循环中等待readFile 完成。

      ...
      } else {
         const data = await fs.readFile(absolute);
         if (data.indexOf('TODO') >= 0) {
            result.push(absolute);
            console.log(result)// returns [1,2,"file1.js", "file2.js"]
         }
      }
      ...
      

      对我来说,这更具可读性,您可以摆脱错误处理并将其留给外部try/catch

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-11
        • 2013-02-16
        • 1970-01-01
        相关资源
        最近更新 更多