簡體   English   中英

當沒有錯誤時,回調應該傳遞 null 還是 undefined?

[英]Should a callback be passed null or undefined when there is no error?

我希望這是一個簡單的問題。 哪個是回調的公認最佳實踐?

選項1:

function get (id, callback) {
    var topic = find(id);
    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;
    return (topic) ? callback(null, topic) : callback(err);
}

選項 2:

function get (id, callback) {
    var topic = find(id);
    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;
    return (topic) ? callback(undefined, topic) : callback(err);
}

旁注, find() 返回undefined ,而不是null

提前致謝。

我會做 Node 內置 API 函數所做的事情。

一個微不足道的實驗告訴我:

  • 成功時open通過null表示err

  • open在失敗時為 data 參數傳遞null


其他幾點:

  1. 你的代碼總是在構造一個Error對象,即使一切正常。 我不會那樣做,沒有意義。

  2. 您的代碼正在返回調用回調的結果。 這是不尋常的。

  3. 據我所知,您的代碼正在同步調用回調。 (例如,當調用get ,回調將在get返回之前發生。)通常,異步調用是異步調用。 如果您正在同步處理,例如openSync等,請將Sync放在名稱上並直接返回值,而不是調用回調。

傳遞null作為參數停用默認參數值機制。 如果回調函數具有默認參數值並且您為空參數發送null ,則回調函數將使用null ,而不是參數的默認值。

 function multiply(a=1, b=1){ return a*b; } console.log(multiply(undefined, 2)); console.log(multiply(null, 2));

約定為null如下所示: https : //docs.nodejitsu.com/articles/errors/what-are-the-error-conventions

正如@TJ Crowder 在評論中所說,如果錯誤不會被發回,請不要構建錯誤。

function get (id, callback) {
    var topic = find(id);

    if (topic) {
        return callback(null, topic);
    }

    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;

    return callback(err);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM