promise的习题

文章通过一个具体的Promise代码示例,展示了resolve函数如何触发then链式调用,并解释了在Promise链中返回值和异步流程的顺序。作者强调了对Promise基础概念的掌握对于解决异步编程问题的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

碰到了一个题,因为本身对promise了解不深,所以记录一下

Promise,resolve().then(()=>{
	console.log(0)
	return Promise.resolve(4)
}).then(res=>{
	console.log(res)
})
Promise.resolve().then(()=>{
	console.log(1)
}).then(()=>{
	console.log(2)
}).then(()=>{
	console.log(3)
}).then(()=>{
	console.log(5)
}).then(()=>{
	console.log(6)
}).then(()=>{
	console.log(7)
})
### TypeScript 练习题题目与示例 以下是几个适合初学者到中级水平的 TypeScript 练习题,涵盖了基础语法、泛型以及复杂类型的构建等内容。 --- #### 1. 声明并导出模块中的变量 创建一个名为 `config.ts` 的文件,在其中定义一个常量变量 `API_URL` 并赋值为 `"https://api.example.com"`。确保该变量可以被其他模块导入使用[^1]。 ```typescript // config.ts 文件内容如下 export const API_URL = "https://api.example.com"; ``` 通过这种方式,可以在另一个文件中引入此配置: ```typescript import { API_URL } from './config'; console.log(API_URL); ``` --- #### 2. 实现 `OptionalKeys` 泛型工具类型 给定一个对象类型 `Person`,编写一个通用的工具类型 `OptionalKeys<T>` 来提取对象类型中所有的可选键名[^2]。 解决方案如下: ```typescript type Person = { id: string; name: string; age: number; from?: string; speak?: string; }; type OptionalKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : undefined extends T[K] ? K : never; }[keyof T]; type PersonOptionalKeys = OptionalKeys<Person>; // "from" | "speak" ``` 上述代码利用了条件类型和映射类型来判断哪些字段是可选的。 --- #### 3. 动态规划算法在字符串匹配中的应用 假设我们有一个动态规划问题,目标是比较两个字符串是否可以通过删除某些字符使它们相等。如果当前比较的字符相同,则状态转移方程为 `dp[i][j] = dp[i-1][j-1]`;否则需要进一步处理[^3]。 下面是一个简单的 TypeScript 函数实现这一逻辑: ```typescript function isMatch(s: string, p: string): boolean { const m = s.length; const n = p.length; // 创建二维数组表示 DP 表格 const dp: boolean[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(false)); // 初始条件:空串能匹配空模式 dp[0][0] = true; for (let i = 0; i <= m; i++) { for (let j = 1; j <= n; j++) { if (p[j - 1] === '*') { dp[i][j] = dp[i][j - 2]; if (i > 0 && (s[i - 1] === p[j - 2] || p[j - 2] === '.')) { dp[i][j] ||= dp[i - 1][j]; } } else if (i > 0 && (s[i - 1] === p[j - 1] || p[j - 1] === '.')) { dp[i][j] = dp[i - 1][j - 1]; } } } return dp[m][n]; } const result = isMatch("abc", "a*b.c"); console.log(result); // 输出 true 或 false ``` --- #### 4. 构建自定义 Promise 类型 设计一个函数 `delay(ms)` 返回一个新的 Promise 对象,它会在指定的时间后解析成功。 ```typescript function delay(ms: number): Promise<void> { return new Promise((resolve) => setTimeout(resolve, ms)); } async function testDelay() { console.log('等待前'); await delay(2000); console.log('两秒后执行'); } testDelay(); ``` --- #### 5. 使用接口约束类的行为 定义一个接口 `Animal` 描述动物行为,并基于此接口创建具体类实例。 ```typescript interface Animal { name: string; sound(): void; } class Dog implements Animal { constructor(public name: string) {} sound(): void { console.log(`${this.name} says woof!`); } } const myDog = new Dog('Buddy'); myDog.sound(); // Buddy says woof! ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值