首页 > 解决方案 > 如何等待 findit 结果?

问题描述

您好我正在使用库findit递归搜索目录树中的文件。我能够找到该文件,但是在尝试对文件执行某些操作之前如何等待搜索完成?现在我有:

var path = require('path');
var finder = require('findit')(project_root_dir);
finder.on('file', function (file, stat) {
        if (path.basename(file) == 'file_im_looking_for.json') {
          stop()  // found it
          console.log('FOUND IT');
          console.log(file);
          console.log(path.basename(file));
          found_file = file;
        }
      });
// Now I want to do some stuff with found_file

我的问题是 findit 需要一些时间才能运行,因此我稍后引用 found_file 的代码通常处理未定义的值而不是我想要的文件路径字符串。在使用我的 found_file 变量之前,如何等待 finder.on() 方法完成?

标签: node.jsasynchronous

解决方案


承诺是你需要的。试试这个代码:

(async () => {
  var search = new Promise((resolve, reject) => {
     var finder = require('findit')(project_root_dir);
     finder.on('file', function (file, stat) {
        if (path.basename(file) == 'file_im_looking_for.json') {
          stop()  // found it
          console.log('FOUND IT');
          console.log(file);
          console.log(path.basename(file));
          resolve(file)
        }
      });
     finder.on('error', reject);
  });
  var found_file = await search;
  // do some stuff with found_file
})()

推荐阅读