mirror of
https://github.com/denoland/deno.git
synced 2025-09-30 22:21:15 +00:00
fix(std/node): Stop callbacks being called twice when callback throws error (#8867)
This commit is contained in:
parent
f9949a3170
commit
06bd692e5c
46 changed files with 603 additions and 178 deletions
|
@ -39,8 +39,9 @@ export default function randomBytes(
|
|||
cb?: (err: Error | null, buf?: Buffer) => void,
|
||||
): Buffer | void {
|
||||
if (typeof cb === "function") {
|
||||
let err: Error | null = null, bytes: Buffer;
|
||||
try {
|
||||
cb(null, generateRandomBytes(size));
|
||||
bytes = generateRandomBytes(size);
|
||||
} catch (e) {
|
||||
//NodeJS nonsense
|
||||
//If the size is out of range it will throw sync, otherwise throw async
|
||||
|
@ -50,9 +51,16 @@ export default function randomBytes(
|
|||
) {
|
||||
throw e;
|
||||
} else {
|
||||
cb(e);
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (err) {
|
||||
cb(err);
|
||||
} else {
|
||||
cb(null, bytes);
|
||||
}
|
||||
}, 0);
|
||||
} else {
|
||||
return generateRandomBytes(size);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue