从头异步函数与使用 Promise 转换简单同步函数之间的区别?

Difference between de-novo async function vs conversion of a simple synchronous function with a Promise?

为了尽量减少代码重复,我编写了一些简单的 JS/TS 异步函数,方法是将相应的同步函数封装在 Promise 中。但是,在其他地方没有看到这一点,我担心我可能会遗漏一些设计问题。

例如:

function fileExistsSync(path: string) {
    try {
        const result = Deno.statSync(path);
        return result.isFile;
    } catch (err) {
        if (err instanceof Deno.errors.PermissionDenied) {
            throw err;
        }
        return false;
    }
}

async function fileExists(path: string) {
    return await Promise.resolve().then(() => fileExistsSync(path));
}

async function fileExistsAsync(path: string) {
    try {
        const result = await Deno.stat(path);
        return result.isFile;
    } catch (err) {
        if (err instanceof Deno.errors.PermissionDenied) {
            throw err;
        }
        return false;
    }
}

函数 fileExists()fileExistsAsync() 之间有什么明显的区别吗?

是的,因为 fileExists 使用 Deno.statSync,而 fileExistsAsync 使用 Deno.stat

同步版本的IO函数阻塞了整个JS执行运行时,而promise/asyncDeno.stat版本允许其他JS代码在等待结果的同时继续执行。