从头异步函数与使用 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代码在等待结果的同时继续执行。
为了尽量减少代码重复,我编写了一些简单的 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代码在等待结果的同时继续执行。