1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-15 11:58:42 -05:00

feat(std/node): implement process.nextTick (#8386)

This commit is contained in:
Steven Guerrero 2020-11-16 14:44:37 -05:00 committed by GitHub
parent dd9c204884
commit 8ab20a4582
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 0 deletions

View file

@ -28,6 +28,25 @@ export const versions = {
...Deno.version, ...Deno.version,
}; };
/** https://nodejs.org/api/process.html#process_process_nexttick_callback_args */
export function nextTick(this: unknown, cb: () => void): void;
export function nextTick<T extends Array<unknown>>(
this: unknown,
cb: (...args: T) => void,
...args: T
): void;
export function nextTick<T extends Array<unknown>>(
this: unknown,
cb: (...args: T) => void,
...args: T
) {
if (args) {
queueMicrotask(() => cb.call(this, ...args));
} else {
queueMicrotask(cb);
}
}
/** https://nodejs.org/api/process.html#process_process */ /** https://nodejs.org/api/process.html#process_process */
// @deprecated `import { process } from 'process'` for backwards compatibility with old deno versions // @deprecated `import { process } from 'process'` for backwards compatibility with old deno versions
export const process = { export const process = {
@ -123,6 +142,7 @@ export const process = {
// Getter also allows the export Proxy instance to function as intended // Getter also allows the export Proxy instance to function as intended
return Deno.env.toObject(); return Deno.env.toObject();
}, },
nextTick,
}; };
/** /**

View file

@ -5,6 +5,7 @@ import { assert, assertEquals, assertThrows } from "../testing/asserts.ts";
import * as path from "../path/mod.ts"; import * as path from "../path/mod.ts";
import * as all from "./process.ts"; import * as all from "./process.ts";
import { argv, env } from "./process.ts"; import { argv, env } from "./process.ts";
import { delay } from "../async/delay.ts";
// NOTE: Deno.execPath() (and thus process.argv) currently requires --allow-env // NOTE: Deno.execPath() (and thus process.argv) currently requires --allow-env
// (Also Deno.env.toObject() (and process.env) requires --allow-env but it's more obvious) // (Also Deno.env.toObject() (and process.env) requires --allow-env but it's more obvious)
@ -164,3 +165,23 @@ Deno.test({
// assert(process.stderr.isTTY); // assert(process.stderr.isTTY);
}, },
}); });
Deno.test({
name: "process.nextTick",
async fn() {
let withoutArguments = false;
process.nextTick(() => {
withoutArguments = true;
});
const expected = 12;
let result;
process.nextTick((x: number) => {
result = x;
}, 12);
await delay(10);
assert(withoutArguments);
assertEquals(result, expected);
},
});