版本

no-promise-executor-return

禁止从 Promise 执行器函数返回值

💡 hasSuggestions

此规则报告的一些问题可以通过编辑器建议手动修复。

new Promise 构造函数接受一个名为执行器的单个参数。

const myPromise = new Promise(function executor(resolve, reject) {
    readFile('foo.txt', function(err, result) {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

执行器函数通常会启动一些异步操作。完成后,执行器应使用结果调用resolve,或者如果发生错误则调用reject

执行器的返回值会被忽略。从执行器函数返回值可能是一个错误,因为返回值无法使用,并且不会以任何方式影响 Promise。

规则详情

此规则禁止从 Promise 执行器函数返回值。

仅允许不带值的return,因为它是一个控制流语句。

此规则的错误代码示例

在游乐场中打开
/*eslint no-promise-executor-return: "error"*/

new Promise((resolve, reject) => {
    if (someCondition) {
        return defaultResult;
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

new Promise((resolve, reject) => getSomething((err, data) => {
    if (err) {
        reject(err);
    } else {
        resolve(data);
    }
}));

new Promise(() => {
    return 1;
});

new Promise(r => r(1));

此规则的正确代码示例

在游乐场中打开
/*eslint no-promise-executor-return: "error"*/

// Turn return inline into two lines
new Promise((resolve, reject) => {
    if (someCondition) {
        resolve(defaultResult);
        return;
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

// Add curly braces
new Promise((resolve, reject) => {
    getSomething((err, data) => {
        if (err) {
            reject(err);
        } else {
            resolve(data);
        }
    });
});

new Promise(r => { r(1) });
// or just use Promise.resolve
Promise.resolve(1);

选项

此规则接受一个选项,一个对象,包含以下属性

  • allowVoid:如果设置为true(默认为false),则此规则将允许返回值为空。

allowVoid

使用{ "allowVoid": true }选项的此规则的正确代码示例

在游乐场中打开
/*eslint no-promise-executor-return: ["error", { allowVoid: true }]*/

new Promise((resolve, reject) => {
    if (someCondition) {
        return void resolve(defaultResult);
    }
    getSomething((err, result) => {
        if (err) {
            reject(err);
        } else {
            resolve(result);
        }
    });
});

new Promise((resolve, reject) => void getSomething((err, data) => {
    if (err) {
        reject(err);
    } else {
        resolve(data);
    }
}));

new Promise(r => void r(1));

版本

此规则在 ESLint v7.3.0 中引入。

进一步阅读

资源

更改语言