Versions

no-sync

Disallow synchronous methods

此规则于 ESLint v7.0.0 中废弃,请使用 eslint-plugin-n 中的对应规则代替。

在 Node.js 中,大多数 I/O 是通过异步方法完成的。然而,异步方法往往有同步版本。例如,fs.exists()fs.existsSync()。在某些情况下,使用同步操作是可以的(如果像 ESLint 那样,你正在编写一个命令行工具)。然而,在其他情况下,使用同步操作被认为是一种不好的做法,应该避免。例如,如果你在 Node.js 上运行一个高流量的网络服务器,你应该仔细考虑是否要允许任何可能锁定服务器的同步操作。

规则细节

这条规则的目的是防止 Node.js 中的同步方法被调用。它特别寻找方法的后缀“Sync”(这是 Node.js 操作的惯例)。

选项

该规则有一个可选的对象选项 { allowAtRootLevel: <boolean> },它决定是否允许在文件的顶层,在任何函数之外使用同步方法。这个选项的默认值是 false

使用此规则与默认的 { allowAtRootLevel: false } 选项的错误示例:

Open in Playground
/*eslint no-sync: "error"*/

fs.existsSync(somePath);

function foo() {
  var contents = fs.readFileSync(somePath).toString();
}

使用此规则与默认的 { allowAtRootLevel: false } 选项的正确示例:

Open in Playground
/*eslint no-sync: "error"*/

obj.sync();

async(function() {
    // ...
});

使用此规则与 { allowAtRootLevel: true } 选项的错误示例:

Open in Playground
/*eslint no-sync: ["error", { allowAtRootLevel: true }]*/

function foo() {
  var contents = fs.readFileSync(somePath).toString();
}

var bar = baz => fs.readFileSync(qux);

使用此规则与 { allowAtRootLevel: true } 选项的正确示例:

Open in Playground
/*eslint no-sync: ["error", { allowAtRootLevel: true }]*/

fs.readFileSync(somePath).toString();

何时不用

如果你想在你的脚本中允许同步操作,不要启用这个规则。

Version

This rule was introduced in ESLint v0.0.9.

Resources

更改语言