Path: blob/main/src/vs/platform/lifecycle/common/lifecycle.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { isThenable, Promises } from '../../../base/common/async.js';67// Shared veto handling across main and renderer8export function handleVetos(vetos: (boolean | Promise<boolean>)[], onError: (error: Error) => void): Promise<boolean /* veto */> {9if (vetos.length === 0) {10return Promise.resolve(false);11}1213const promises: Promise<void>[] = [];14let lazyValue = false;1516for (const valueOrPromise of vetos) {1718// veto, done19if (valueOrPromise === true) {20return Promise.resolve(true);21}2223if (isThenable(valueOrPromise)) {24promises.push(valueOrPromise.then(value => {25if (value) {26lazyValue = true; // veto, done27}28}, err => {29onError(err); // error, treated like a veto, done30lazyValue = true;31}));32}33}3435return Promises.settled(promises).then(() => lazyValue);36}373839