异步编程
Promise
Promise 是异步编程的一种解决方案,它代表了一个异步操作的最终结果。它有三种状态:
Pending: 初始状态,表示异步操作还没有完成。
Fulfilled: 成功状态,表示异步操作已经成功完成。
Rejected: 失败状态,表示异步操作失败。
resolve(): 将 Promise 对象的状态从 Pending 变为 Fulfilled,并将异步操作的结果传递给回调函数。reject(): 将 Promise 对象的状态从 Pending 变为 Rejected,并将异步操作的错误信息传递给回调函数。then()方法,允许指定成功和失败状态的回调函数。then()` 方法返回一个新的 Promise 对象,可以链式调用。catch()方法用于指定失败状态的回调函数.
typescript
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve('success');
}, 1000);
});
promise.then((result) => {
console.log(result);
}).catch((error) => {
console.error(error);
});async/await
async/await 是 ES2017 引入的异步编程语法。它可以让我们以同步的方式编写异步代码,避免了回调地狱。
async关键字声明一个函数为异步函数,函数体内可以使用await关键字等待 Promise 对象。await关键字只能在异步函数中使用,用于等待 Promise 对象。try...catch语句捕获异步函数中抛出的错误。
typescript
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
fetchData();异步迭代器
异步迭代器是 ES2018 引入的新语法,它允许我们异步地遍历可迭代对象(如 Array、Map、Set、String、TypedArray、arguments 对象等)。
Symbol.asyncIterator属性是一个异步迭代器,可以用for-await-of循环遍历。next()方法返回一个 Promise 对象,该对象包含两个属性:done和value。done属性是一个布尔值,表示是否遍历结束;value属性是当前迭代的值。
typescript
const asyncIterator = someAsyncFunction();
const array = [1, 2, 3];
const set = new Set([1, 2, 3]);
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
for await (const value of asyncIterator) {
console.log(value);
}
for await (const value of array) {
console.log(value);
}
for await (const value of set) {
console.log(value);
}
for await (const [key, value] of map) {
console.log(key, value);
}