• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const { promiseHooks } = require('v8');
5
6assert.throws(() => {
7  promiseHooks.onSettled(async function() { });
8}, /The "settledHook" argument must be of type function/);
9
10assert.throws(() => {
11  promiseHooks.onSettled(async function*() { });
12}, /The "settledHook" argument must be of type function/);
13
14let seen;
15
16const stop = promiseHooks.onSettled(common.mustCall((promise) => {
17  seen = promise;
18}, 4));
19
20// Constructor resolve triggers hook
21const promise = new Promise((resolve, reject) => {
22  assert.strictEqual(seen, undefined);
23  setImmediate(() => {
24    resolve();
25    assert.strictEqual(seen, promise);
26    seen = undefined;
27
28    constructorReject();
29  });
30});
31
32// Constructor reject triggers hook
33function constructorReject() {
34  const promise = new Promise((resolve, reject) => {
35    assert.strictEqual(seen, undefined);
36    setImmediate(() => {
37      reject();
38      assert.strictEqual(seen, promise);
39      seen = undefined;
40
41      simpleResolveReject();
42    });
43  });
44  promise.catch(() => {});
45}
46
47// Sync resolve/reject helpers trigger hook
48function simpleResolveReject() {
49  const resolved = Promise.resolve();
50  assert.strictEqual(seen, resolved);
51  seen = undefined;
52
53  const rejected = Promise.reject();
54  assert.strictEqual(seen, rejected);
55  seen = undefined;
56
57  stop();
58  rejected.catch(() => {});
59}
60