问:链接承诺Promisify同步操作?(Q: Promisify Synchronous oper

2019-10-23 01:35发布

是否有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()

什么是最好的?

Answer 1:

通过执行同步IO没有,而且,它给人的假象,这些方法是异步,所以你或其他开发人员可能会打电话给他们,并期望该方法不破坏整个io.js / Node.js的并发模型。

我建议你要么让这些功能不返回的承诺或使它们异步IO执行。 另外请注意,你的方法有一个竞争条件(如果是什么文件,当你检查它的存在,当您尝试访问它之间删除?)



Answer 2:

其实这个特定链将完完全全一模一样的,即使你写loadSettings是这样的:

function loadSettings(path) {
    if (fs.existsSync(path)) {
        return fsJson.loadSync(path);
    }
    throw 'No local settings!';
}

请注意,这是一个可怕的做法用绳子拒绝或抛出字符串,这样最好你想要new Error('No local settings!')来代替。 我的意思只是想象一下,如果该错误实际发生的,它只是一个字符串 - 你根本不知道如何或在错误真的发生了。



文章来源: Q: Promisify Synchronous operations for chaining promises?