1/* 2* Copyright (C) 2025 HiHope Open Source Organization. 3* Licensed under the Apache License, Version 2.0 (the "License"); 4* you may not use this file except in compliance with the License. 5* You may obtain a copy of the License at 6* 7* http://www.apache.org/licenses/LICENSE-2.0 8* 9* Unless required by applicable law or agreed to in writing, software 10* distributed under the License is distributed on an "AS IS" BASIS, 11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12* See the License for the specific language governing permissions and 13* limitations under the License. 14*/ 15export async function sleep(time: number): Promise<number> { 16 return new Promise<number>((resolve): void => { 17 setTimeout((): void => { 18 resolve(1); 19 }, time); 20 }); 21}; 22 23 24export const TSpromiseTest1: Promise<string> = new Promise((resolve) => { 25 setTimeout(() => resolve('66'), 100); 26}); 27 28export const TSpromiseTest2: Promise<number> = new Promise((resolve) => { 29 setTimeout(() => resolve(66), 100); 30}); 31 32export const TSpromiseTest3: Promise<boolean> = new Promise((resolve) => { 33 setTimeout(() => resolve(true), 100); 34}); 35 36export const TSpromiseTest4: Promise<bigint> = new Promise((resolve) => { 37 setTimeout(() => resolve(66n), 100); 38}); 39 40 41interface testObject { 42 age: number; 43}; 44 45export const TSpromiseTest5: Promise<testObject> = new Promise((resolve) => { 46 setTimeout(() => resolve({ 47 age: 30 48 }), 100); 49}); 50 51export const TSpromiseTest6: Promise<testObject> = new Promise((resolve) => { 52 setTimeout(() => resolve({ 53 age: 30 54 }), 100); 55}); 56 57export const TSpromiseTest7: Promise<number[]> = new Promise((resolve) => { 58 setTimeout(() => resolve([65, 66, 67]), 100); 59}); 60 61export const TSpromiseTest8: Promise<() => string> = new Promise((resolve) => { 62 setTimeout(() => resolve(() => 'Hello World!'), 100); 63}); 64 65export const TSpromiseTest9: Promise<void> = new Promise((resolve) => { 66 setTimeout(() => resolve(), 100); 67}); 68 69export const TSpromiseTest10: Promise<null> = new Promise((resolve) => { 70 setTimeout(() => resolve(null), 100); 71}); 72 73export const TSpromiseTest11: Promise<undefined> = new Promise((resolve) => { 74 setTimeout(() => resolve(undefined), 100); 75}); 76 77export const TSpromiseTest12: Promise<never> = new Promise((_, reject) => { 78 setTimeout(() => reject(new Error('For test')), 100); 79}); 80 81 82class Person { 83 name: string = ''; 84 surname: string = ''; 85 86 constructor(n: string, sn: string) { 87 this.name = n; 88 this.surname = sn; 89 }; 90 91 fullName(): string { 92 return this.name + ' ' + this.surname; 93 } 94}; 95 96export const TSpromiseTest13: Promise<Person> = new Promise((resolve) => { 97 setTimeout(() => resolve( 98 new Person('John', 'Smith') 99 ), 100); 100}); 101 102 103class For14TSpromiseTest { 104 name: string = ''; 105 age: number = 0; 106 107 constructor(n: string, age: number) { 108 this.name = n; 109 this.age = age; 110 }; 111 112 fullName(): string { 113 return this.name; 114 }; 115 116 getAge(): number { 117 return this.age; 118 }; 119}; 120 121export const TSpromiseTest14: Promise<number> = new Promise((resolve) => { 122 const p = new For14TSpromiseTest('John', 66); 123 setTimeout(() => resolve( 124 p.getAge() 125 ), 100); 126}); 127 128 129export const TSpromiseTest16: Promise<number> = new Promise((resolve) => { 130 setTimeout(() => resolve(66), 100); 131}); 132 133export const TSpromiseTest17: Promise<never> = new Promise((_, reject) => { 134 setTimeout(() => reject(new Error('For test')), 100); 135}); 136 137export const TSpromiseTest18: Promise<never> = new Promise((_, reject) => { 138 const errorMessage = 'For test'; 139 setTimeout(() => reject(new Error(errorMessage)), 100); 140}); 141 142export const TSpromiseTest19: Promise<never> = new Promise((_, reject) => { 143 setTimeout(() => reject(new Error('For test')), 100); 144}); 145 146 147 148export function TSpromiseTest24(num: number): Promise<number> { 149 const promise1 = new Promise<number>(resolve => setTimeout(() => resolve(num * 2), 100)); 150 const promise2 = new Promise<number>(resolve => setTimeout(() => resolve(num * 3), 100)); 151 const promise3 = new Promise<number>((resolve, reject) => setTimeout(() => reject(new Error('For test')), 100)); 152 153 return Promise.race([promise1, promise2, promise3]); 154}; 155 156 157export function TSpromiseTest25(num: number): Promise<PromiseSettledResult<number>[]> { 158 const promise1 = new Promise<number>(resolve => setTimeout(() => resolve(num * 2), 100)); 159 const promise2 = new Promise<number>(resolve => setTimeout(() => resolve(num * 3), 100)); 160 const promise3 = new Promise<number>((resolve, reject) => setTimeout(() => reject(new Error('For test')), 100)); 161 162 return Promise.allSettled([promise1, promise2, promise3]); 163}; 164 165 166export function TSpromiseTest26(num: number): Promise<number> { 167 const promise1 = new Promise<number>(resolve => setTimeout(() => resolve(num * 2), 100)); 168 const promise2 = new Promise<number>(resolve => setTimeout(() => resolve(num * 3), 100)); 169 const promise3 = new Promise<number>((resolve, reject) => setTimeout(() => reject(new Error('For test')), 100)); 170 171 return Promise.any([promise1, promise2, promise3]); 172}; 173 174export const TSpromiseTest27: Promise<number> = new Promise((resolve) => { 175 resolve(1); 176}) 177 .then((value: number) => value + 1) 178 .then((value: number) => value + 2) 179 .then((value: number) => value + 3) 180 .then((value: number) => value + 4) 181 .then((value: number) => value + 5); 182 183export const TSpromiseTest28: Promise<number> = new Promise((resolve) => { 184 resolve(1); 185}) 186 .then((value: number) => value + 1) 187 .then((value: number) => value + 2) 188 .then((value: number) => value + 3) 189 .catch((error: unknown) => { 190 console.error('First catch:', error); 191 return 0; 192 }) 193 .catch((error: unknown) => { 194 console.error('Second catch:', error); 195 return -1; 196 }); 197 198export const TSpromiseTest29 = new Promise((resolve) => { 199 resolve(1); 200}) 201 .then((value: number) => value + 1) 202 .then((value: number) => value + 2) 203 .catch((error: unknown) => { 204 console.log('First catch:', error); 205 return 0; 206 }) 207 .catch((error: unknown) => { 208 console.log('Second catch:', error); 209 return -1; 210 }) 211 .finally(() => { 212 console.log('end'); 213 });