/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import {StatusMessageType} from '../reducers/application'; export default function promiseTimeout( ms: number, promise: Promise, timeoutMessage?: string, ): Promise { // Create a promise that rejects in milliseconds const timeout: Promise = new Promise((resolve, reject) => { const id = setTimeout(() => { clearTimeout(id); reject(new Error(timeoutMessage || `Timed out in ${ms} ms.`)); }, ms); }); // Returns a race between our timeout and the passed in promise return Promise.race([promise, timeout]); } export function showStatusUpdatesForPromise( promise: Promise, message: string, sender: string, addStatusMessage: (payload: StatusMessageType) => void, removeStatusMessage: (payload: StatusMessageType) => void, ): Promise { const statusMsg = {msg: message, sender}; addStatusMessage(statusMsg); return promise .then(result => { removeStatusMessage(statusMsg); return result; }) .catch(e => { removeStatusMessage(statusMsg); throw e; }); }