js promise的使用
时间: 2025-01-06 08:44:57 浏览: 2
### JavaScript 中 Promise 的使用教程
Promise 是一种用于处理异步操作的对象,允许以同步的方式编写异步代码。当异步操作完成时,Promise 对象会通知调用者并传递结果。
#### 创建 Promise 实例
要创建一个新的 `Promise` 实例,需传入一个执行器函数作为参数,该函数接收两个参数:`resolve` 和 `reject` 函数。这两个函数分别用于在成功或失败情况下更新状态[^2]。
```javascript
const myFirstPromise = new Promise((resolve, reject) => {
// 执行一些耗时的操作...
setTimeout(() => {
resolve('成功'); // 当一切顺利时,我们调用 resolve()
}, 250);
});
```
#### 处理 Promise 结果
一旦有了 `Promise` 实例,就可以利用 `.then()` 方法注册回调函数来获取其最终的结果。如果希望捕获可能发生的错误,则可以链式调用`.catch()`方法[^3]。
```javascript
myFirstPromise
.then(result => console.log(`这是成功的消息: ${result}`))
.catch(error => console.error(`发生了一个错误: ${error}`));
```
#### 链式调用多个 then() 方法
由于每个 `then()` 调用都会返回一个新的 `Promise`,因此可以在同一个链条上连续添加更多的 `then()` 来实现复杂的逻辑流程控制。
```javascript
new Promise(resolve => {
setTimeout(() => resolve(1), 1000)
})
.then(value => {
console.log(value); // 输出 "1"
return value * 2;
})
.then(value => {
console.log(value); // 输出 "2"
return value * 2;
})
.then(value => {
console.log(value); // 输出 "4"
});
```
#### 并发执行多个 Promises
有时需要等待多个独立的异步请求都完成后才继续下一步,在这种场景下可借助于静态方法 `Promise.all([])` 或者 `Promise.race([])`。
```javascript
// 假设有三个不同的 API 请求
const promiseOne = fetch('/api/one');
const promiseTwo = fetch('/api/two');
const promiseThree = fetch('/api/three');
// 使用 all 同时发起这三个请求,并等到全部完成后再做后续动作
Promise.all([promiseOne, promiseTwo, promiseThree])
.then(responses => responses.forEach(response => response.json()))
.then(dataArray => dataArray.forEach(console.log));
// 如果只需要知道哪个最先完成可以用 race
Promise.race([promiseOne, promiseTwo, promiseThree]).then(firstResponse => firstResponse.json());
```
阅读全文