2014-04-11 155 views
0
Provider.prototype.configure = function(callback) { 
var that = this; 

if (that.getConfiguration() != undefined) { 
    return callback(null); 
} 

models.configuration.all({where: {name: 'provider'}}, function (error, defaultProviderConfiguration) { 
    if (error) { 
     return callback(error); 
    } 
    that.setConfiguration(defaultProviderConfiguration[0]); 
    return callback(null); 
}); 
}; 

請幫我修復不一致的返回點。Nodejs函數有不一致的返回點

Provider.getConfiguration()是同步方法。

Provider.setConfiguration()是一種同步方法。

models.configuration.all()是一種異步方法。

+0

我很困惑...這似乎應該工作 –

+0

webStorm inspectionJs報道了這一點。 – Keloo

+0

該函數有時有時會同步調用回調,有時會異步調用回調,這會導致很難發現錯誤。請參閱:Isaac Z. Schlueter的[「不要釋放Zalgo」](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)。 – user3374348

回答

1

假設的問題是,你有時同步調用回調,有時異步,你可以使用process.nextTick推遲調用回調,直到下一個事件循環滴答:

if (that.getConfiguration() != undefined) { 
    return process.nextTick(callback); 
} 

雖然我不知道這是你的IDE抱怨什麼。你的IDE可能不喜歡你如何「早退」回報,這可能被視爲一種意大利麪代碼。你可以通過重寫這樣的函數來關閉它:

if (that.getConfiguration() != undefined) { 
    process.nextTick(callback); 
} else { 
    // rest of the function 
} 

對於像這樣的小功能,雖然我不確定這是一件大事。

+0

第二個例子解決了這個問題。但它看起來很醜。 – Keloo

+0

查看[IDE的文檔](http://www.jetbrains.com/webstorm/webhelp/suppressing-inspections.html),您應該能夠抑制該特定警告。雖然我不會養成這樣做的習慣。 – user3374348