是否有promisifying同步操作,以便通过设计他们可以的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()
什么是最好的?
通过执行同步IO没有,而且,它给人的假象,这些方法是异步,所以你或其他开发人员可能会打电话给他们,并期望该方法不破坏整个io.js / Node.js的并发模型。
我建议你要么让这些功能不返回的承诺或使它们异步IO执行。 另外请注意,你的方法有一个竞争条件(如果是什么文件,当你检查它的存在,当您尝试访问它之间删除?)
其实这个特定链将完完全全一模一样的,即使你写loadSettings
是这样的:
function loadSettings(path) {
if (fs.existsSync(path)) {
return fsJson.loadSync(path);
}
throw 'No local settings!';
}
请注意,这是一个可怕的做法用绳子拒绝或抛出字符串,这样最好你想要new Error('No local settings!')
来代替。 我的意思只是想象一下,如果该错误实际发生的,它只是一个字符串 - 你根本不知道如何或在错误真的发生了。