版本

no-promise-executor-return

禁止從 Promise 執行器函式中回傳值

💡 有建議

此規則回報的一些問題可以透過編輯器建議手動修復

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),此規則將允許回傳 void 值。

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 中引入的。

延伸閱讀

資源

變更語言