335a141b85
We can't attach a meaningful stack trace to the AggregateError Promise.any rejects with, but we can augment the individual errors' stack traces with Promise.any and the index of the corresponding Promise in the input. Bug: v8:9808 Change-Id: I7ba754c9b043594decaac8b3a23be74f05c3dffd Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2198983 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Dominik Inführ <dinfuehr@chromium.org> Cr-Commit-Position: refs/heads/master@{#67778}
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
// Copyright 2020 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax --async-stack-traces --harmony-promise-any
|
|
|
|
// Basic test with Promise.any().
|
|
(function() {
|
|
async function fine() { }
|
|
|
|
async function thrower() {
|
|
await fine();
|
|
throw new Error();
|
|
}
|
|
|
|
async function driver() {
|
|
await Promise.any([thrower(), thrower()]);
|
|
}
|
|
|
|
async function test(f) {
|
|
try {
|
|
await f();
|
|
assertUnreachable();
|
|
} catch (e) {
|
|
assertInstanceof(e, AggregateError);
|
|
assertEquals(2, e.errors.length);
|
|
assertMatches(/Error.+at thrower.+at async Promise.any \(index 0\).+at async driver.+at async test/ms, e.errors[0].stack);
|
|
assertMatches(/Error.+at thrower.+at async Promise.any \(index 1\).+at async driver.+at async test/ms, e.errors[1].stack);
|
|
}
|
|
}
|
|
|
|
assertPromiseResult((async () => {
|
|
%PrepareFunctionForOptimization(thrower);
|
|
%PrepareFunctionForOptimization(driver);
|
|
await test(driver);
|
|
await test(driver);
|
|
%OptimizeFunctionOnNextCall(thrower);
|
|
await test(driver);
|
|
%OptimizeFunctionOnNextCall(driver);
|
|
await test(driver);
|
|
})());
|
|
})();
|