PHP Classes

File: FrontEndScripts/libs/Nemiro/TryAction.ts

Recommend this page to a friend!
  Classes of Aleksey Nemiro   PHP Small Server Administrator   FrontEndScripts/libs/Nemiro/TryAction.ts   Download  
File: FrontEndScripts/libs/Nemiro/TryAction.ts
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Small Server Administrator
Web panel for small Debian and Ubuntu servers
Author: By
Last change:
Date: 8 years ago
Size: 2,136 bytes
 

Contents

Class file image Download
?/* * Copyright © Aleksey Nemiro, 2015. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ module Nemiro { /** * The class allows you to perform the specified action and automatically repeated if an error occurs. */ export class TryAction { /** The action to execution. */ public Action: { (): void; } = null; /** The maximum number of attempts. Default: 10. */ public MaxAttempts: number = 10; /** * The duration of pauses between attempts (in seconds). * Minus one - automatically (by default). */ public Pause: number = -1; /** Attempts counter. */ private Attempts: number = 0; constructor(action: { (): void; }) { if (action == null) { throw Error('Action is required.'); } this.Action = action; } /** Executes the task. */ public Run(): void { this.Attempts++; if (this.Attempts > this.MaxAttempts) { throw new Error('Reached the allowable limit of attempts to perform a task.'); } // ???? ??? ?? ?????? ???????, ?????? ????? if (this.Attempts > 1) { var pause = 0; if (this.Pause == -1) { if (this.Attempts <= 5) { pause = ((this.Attempts % 2) == 0 ? 2000 : 4000); } else { pause = ((this.Attempts % 2) == 0 ? 4000 : 8000); } } else { pause = this.Pause * 1000; } console.log('Pause', pause / 1000) window.setTimeout(this.Action, pause); } else { this.Action(); } } } }