在同步操作中是否有任何优点,以便通过设计将它们链接到onSuccess或onError回调中?
例如:
function loadSettings(path) {
if (fs.existsSync(path)) {
return Q(fsJson.loadSync(path));
}
return new Q.defer().reject('No local settings!');
}
doingSomethingFirst()
.then(loadSettings, obtainSettings)
.then(doSomethingWithSettings)
.done()
什么是最好的?
答案 0 :(得分:2)
不,此外,它给人以错误的印象,即这些方法是异步的,因此您或其他开发人员可能会调用它们,并期望该方法不会通过执行同步IO来破坏整个io.js / node.js并发模型。 / p>
我建议您使这些函数不返回promises或使它们执行异步IO。另请注意,您的方法具有竞争条件(如果在您检查文件存在和尝试访问文件之间删除文件,该怎么办?)
答案 1 :(得分:2)
实际上,即使你这样编写loadSettings
,这个特定链也会完全相同:
function loadSettings(path) {
if (fs.existsSync(path)) {
return fsJson.loadSync(path);
}
throw 'No local settings!';
}
请注意,拒绝使用字符串或抛出字符串是一种可怕的做法,所以理想情况下你需要new Error('No local settings!')
。我的意思是想象一下,如果错误实际发生并且它只是一个字符串 - 你根本不知道错误的发生方式和位置。