我使用此代码加载.eslintrc
:
const eslintrcs = {};
async function getLintOptions(path) {
if (!eslintrcs[path]) {
let eslintrc;
try {
eslintrc = await readFile('./.eslintrc');
eslintrc = await readFile(`${path}/.eslintrc}`);
} catch (err) {
eslintrc = eslintrc || {};
}
eslintrcs[path] = JSON.parse(eslintrc);
console.log(eslintrcs[path]);
}
return eslintrcs[path];
}
所以我这样点了我的文件:
files.forEach(async (filePath) => {
try {
let code;
if (!options.skipLint) {
logFileProgress('Linting', filePath);
code = await readFile(filePath);
const messages = linter.verify(code, await getLintOptions(path));
这里的问题是,由于代码是异步的,所以它在找到第一个await
后停止并保持同步代码,结果就是这个:
info: 2016-10-05 18:47 - Linting: src/server/_config.js
info: 2016-10-05 18:47 - Linting: src/server/admin/router.js
info: 2016-10-05 18:47 - Linting: src/server/server.js
...
{ parser: 'babel-eslint',
extends: 'airbnb',
rules: { indent: [ 2, 4, [Object] ] } }
{ parser: 'babel-eslint',
extends: 'airbnb',
rules: { indent: [ 2, 4, [Object] ] } }
{ parser: 'babel-eslint',
extends: 'airbnb',
rules: { indent: [ 2, 4, [Object] ] } }
有没有办法在获得结果之前停止异步函数?
我甚至试图将getLintOptions
移到forEach
圈外:
const eslintrc = await getLintOptions(path);
files.forEach(async (filePath) => {
try {
let code;
if (!options.skipLint) {
logFileProgress('Linting', filePath);
code = await readFile(filePath);
const messages = linter.verify(code, eslintrc);