NodeJS返回不停止整个功能

时间:2020-02-25 04:21:25

标签: node.js return fs

我有一个函数 enter ,该函数在最里面的readfile的内部和最里面包含两个fs.readFile函数,我正在检查txt文件是否包含某个关键字,是否包含该关键字。应该停止整个输入功能。

输入功能的外观如下:

async function enter(email, firstName, lastName){

  fs.readFile(fileName, function(err, data){
    parsedData = JSON.parse(data);

    email = parsedData.email;

    fs.readFile('./anotherfile.txt', function (err, data) {
      if (err) throw err;
      if(data.includes(email)){
        console.log('Stopping function');
        return;
      }
    });
  });

  console.log('Continuing with function');
}

问题在于,当anotherfile.txt包含关键字时,它不会停止整个功能,而是继续并记录“如上代码所示”的“继续执行功能”。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

fs承诺可用于Node v11.0.0 或者您可以像这样const readFile = util.promisify(fs.readFile);

进行转换
const fsp = require('fs').promises;

async function enter(email, firstName, lastName) {

    try {
        let data = await fsp.readFile(fileName)
        let parsedData = JSON.parse(data);
        let email = parsedData.email;
        data = await fsp.readFile('./anotherfile.txt')

        if (data.includes(email)) {
            console.log('Stopping function');
            return;
        }


        console.log('Continuing with function');


    } catch (err) {
        throw err
    }
}

答案 1 :(得分:0)

这是由于两件事。

  • 您正在使用异步文件读取,也就是说,调用此readFile时,代码流不会停止。而是,程序将继续以常规方式执行。并且当文件读取操作完成时,将使用相应的错误或数据调用您提供的回调函数。

  • return语句在回调函数内部,因此只会影响该函数。

在处理异步函数时,需要使用await。看看here

相关问题