2017-11-11 53 views
1

我在編寫函數時看到了庫可利用可選參數和回調函數。我正在編寫一個庫,並且我想知道是否允許用戶跳過可選參數併發送回調是一個好習慣。使用具有可選參數的回調函數

例如:

function listFiles(params, callback) { 
    if (typeof params === 'function' && !callback) { 
    callback = params; 
    params = {}; 
    } 
    // more code here... 
} 

我的媒體庫的用戶可以撥打listFiles()與參數:

listFiles({ verbose: true }, function callback(err, results) { /*... */ }) 

或只透過callback()功能:

listFiles(function callback(err, results) { /*... */ }) 

主要好處我見用這種方法是用戶不需要這樣做:

listFiles(null, function callback(err, results) { /*... */ }) 

listFiles({}, function callback(err, results) { /*... */ }) 

的問題是,如果我verbose必需的參數,我會打破所有未發送與被髮送空或null作爲params的那些一起params用戶。

我應該使用可選參數作爲回調還是這是一個壞主意?

+2

作爲評論添加,因爲這更多的是一個經驗法則:如果你合理地期望第一個參數可以beco我需要,不要讓它成爲可選的。就個人而言,通過使用「params」(而不是隻允許回調)所提供的穩定性要好於不必指定null或{{}的小方便。 – FeifanZ

+0

爲什麼不把參數作爲第二個參數?然後你可以檢測它是否被定義。 –

+1

@ChrisHappy不會說OP,但回調作爲最後一個參數是一個廣泛使用的JS約定。國際海事組織,它會更糟糕,打破 – FeifanZ

回答

2

爲什麼不使callback之一的參數,所以用戶總是通過一個參數listFiles()

function listFiles(params) { 
    // ... check for optional params and do something with them 
    params.callback(err, result); 
} 

現在,作爲一個用戶,我可以通過可選的PARAMS,如果我想(用limitsort爲例):

listFiles({ 
    limit: 10, 
    sort: 'desc', 
    callback: (err, result) => { 
     // ... do something with result 
    } 
}); 

或者只是需要callback PARAM如果我想允許listFiles()提供默認爲我:

listFiles({ 
    callback: (err, result) => { 
     // ... do something with result 
    } 
}); 
相關問題