summaryrefslogtreecommitdiff
path: root/std/node/_fs/_fs_open.ts
diff options
context:
space:
mode:
authorLiam Murphy <43807659+Liamolucko@users.noreply.github.com>2021-01-26 23:34:40 +1100
committerGitHub <noreply@github.com>2021-01-26 13:34:40 +0100
commit06bd692e5c4a8f66960d3919e7087530b60c20dd (patch)
tree54da22655c71341c0e1e750d5197623e4fa0e286 /std/node/_fs/_fs_open.ts
parentf9949a31707dcaa5a8786bfe4f84ed202be91607 (diff)
fix(std/node): Stop callbacks being called twice when callback throws error (#8867)
Diffstat (limited to 'std/node/_fs/_fs_open.ts')
-rw-r--r--std/node/_fs/_fs_open.ts22
1 files changed, 14 insertions, 8 deletions
diff --git a/std/node/_fs/_fs_open.ts b/std/node/_fs/_fs_open.ts
index bf53115de..55ecbdc1e 100644
--- a/std/node/_fs/_fs_open.ts
+++ b/std/node/_fs/_fs_open.ts
@@ -17,7 +17,7 @@ type openFlags =
| "w+"
| "wx+";
-type openCallback = (err: Error | undefined, fd: number) => void;
+type openCallback = (err: Error | null, fd: number) => void;
function convertFlagAndModeToOptions(
flag?: openFlags,
@@ -61,20 +61,26 @@ export function open(
if (["ax", "ax+", "wx", "wx+"].includes(flags || "") && existsSync(path)) {
const err = new Error(`EEXIST: file already exists, open '${path}'`);
- callback(err, 0);
+ (callback as (err: Error) => void)(err);
} else {
if (flags === "as" || flags === "as+") {
+ let err: Error | null = null, res: number;
try {
- const res = openSync(path, flags, mode);
- callback(undefined, res);
+ res = openSync(path, flags, mode);
} catch (error) {
- callback(error, error);
+ err = error;
+ }
+ if (err) {
+ (callback as (err: Error) => void)(err);
+ } else {
+ callback(null, res!);
}
return;
}
- Deno.open(path, convertFlagAndModeToOptions(flags, mode))
- .then((file) => callback(undefined, file.rid))
- .catch((err) => callback(err, err));
+ Deno.open(path, convertFlagAndModeToOptions(flags, mode)).then(
+ (file) => callback(null, file.rid),
+ (err) => (callback as (err: Error) => void)(err),
+ );
}
}