用koaJS实现了一个接口,接口里面读取了一个文本文件,但是返回数据的时候不能等待文件处理完成后返回数据,而是在最外层才能返回数据。求解。
已解决,附上代码
'use strict';
const readline = require('readline');
const fs = require("fs");
const path = require('path');
module.exports = async function (ctx) {
let filePath = path.resolve(__dirname, '../../../../public/assets/a.txt');
try {
const result = await readFile(filePath);
//区分结果页和情景页
let atom_wise = [];
let atom_card = [];
let atom_wise_sum = 0;
let atom_card_sum = 0;
for (let i = 0; i < result.length; i++) {
// 遍历单个卡片
for (let j = 0; j < result[i].length; j++) {
// 结果页卡片
if(result[i][j] === '1'){
atom_wise_sum++;
atom_wise.push(result[i]);
}
// 情景页卡片
if(result[i][j] === '2' ){
atom_card_sum++;
atom_card.push(result[i]);
}
}
}
ctx.json({
status: 0,
msg: '成功',
atom_wise_sum,
atom_card_sum,
atom_wise,
atom_card
});
} catch (e) {
console.error(e);
ctx.json({
status: 1,
msg: '失败'
});
}
};
function readFile(filePath) {
console.log('开始读取文件...');
let input = fs.createReadStream(filePath);
const rl = readline.createInterface({
input
});
let result = [];
let lineData;
return new Promise((resolve, reject) => {
rl.on('line', (line) => {
if (line.split(/\s+/)[4] === 'atom') {
lineData = line.split(/\s+/);
result.push(lineData);
}
});
rl.on('close', (line) => {
console.log("读取文件完毕!");
resolve(result);
});
rl.on('error', reject);
});
}