javascript promise的用法

  • 格式:docx
  • 大小:12.52 KB
  • 文档页数:6

javascript promise的用法

一、前言

Promise 是 JavaScript 中的一个重要概念,它是一种异步编程解决方案。在 ES6

中引入了 Promise,可以更方便、更优雅地控制异步程序的执行顺序,以及有效避免回调地狱的问题。本文将详细介绍 Promise 的基本用法。

二、Promise 的基本概念

Promise 是一个对象,用来表示异步操作的最终完成(或失败)及其结果。Promise 的主要状态如下:

- pending(进行中):Promise 对象创建后的初始状态。

- fulfilled(已完成):异步操作成功完成时的状态。

- rejected(已拒绝):异步操作失败时的状态。

Promise 的实例有以下三个方法:

- then():当异步操作成功完成时调用,接收一个参数,即异步操作的结果。

- catch(): 当异步操作失败时调用,接收一个参数,即失败的原因。

- finally():当异步操作完成时(无论成功或失败)执行,不接收任何参数。

三、Promise 的基本用法

1. Promise 的创建

Promise 可以通过 new Promise() 来创建,它是一个构造函数,接收一个执行器函数作为参数。执行器函数接收两个函数作为参数:resolve 和 reject,分别表示异步操作成功完成和失败。

```javascript

const promise = new Promise((resolve, reject) => {

// 异步操作代码

const isSuccess = true;

if (isSuccess) { resolve('操作成功!');

} else {

reject('操作失败!');

}

})

```

执行器函数中包含异步操作的代码,代码中需要判断异步操作的结果,如果成功就调用 resolve,并传递操作结果作为参数;如果失败就调用 reject,并传递失败原因作为参数。

2. Promise 的状态转换

Promise 的状态可能会从 pending 转换为 fulfilled 或 rejected。且状态一旦发生变化就不能再次改变,也就是说,一旦成功或失败就不能再进行其他操作。Promise 状态的转换可以通过调用 resolve 或 reject 方法来完成。

```javascript

promise.then(result => {

console.log(result); // 操作成功!

}).catch(error => {

console.log(error); // 操作失败!

})

```

then 方法用于注册当异步操作完成时的回调函数,它接收一个参数:onFulfilled。如果异步操作成功完成,就会调用 onFulfilled,将异步操作的结果传递给它。catch 方法用于注册当异步操作失败时的回调函数,它接收一个参数:onRejected。如果异步操作失败,就会调用 onRejected,将失败原因传递给它。

3. Promise 的链式调用

Promise 的 then 方法可以返回一个新的 Promise 实例,以便链式调用。

```javascript const promise = new Promise((resolve, reject) => {

const isSuccess = true;

if (isSuccess) {

resolve('操作成功!');

} else {

reject('操作失败!');

}

})

promise.then(result => {

return result + ' 第一次处理。';

}).then(result => {

console.log(result); // 操作成功! 第一次处理。

}).catch(error => {

console.log(error); // 操作失败!

})

```

上述代码中,promise.then() 方法返回一个新的 Promise 实例,其操作是将异步操作返回的结果与字符串 `' 第一次处理。'` 进行拼接。新的 Promise 实例再次调用

then() 方法,可以继续进行操作。

4. Promise.all()

Promise.all() 方法接收一个 Promise 实例的数组,并返回一个新的 Promise 实例。当数组中所有的 Promise 实例都成功完成时,新的 Promise 实例才会成功完成。新

Promise 实例的结果是所有完成实例结果的数组。

```javascript

const promise1 = new Promise(resolve => {

setTimeout(() => { resolve('我是 promise1!');

}, 1000);

})

const promise2 = new Promise(resolve => {

setTimeout(() => {

resolve('我是 promise2!');

}, 2000);

})

Promise.all([promise1, promise2]).then(result => {

console.log(result); // ["我是 promise1!", "我是 promise2!"]

})

```

上述代码中,Promise.all() 方法接收一个 promise1 和 promise2 组成的数组。promise1 的 resolve 时间为 1 秒,promise2 的 resolve 时间为 2 秒。新的 Promise

实例会等待所有的 Promise 实例完成后,返回结果数组。

5. Promise.race()

Promise.race() 方法接收一个 Promise 实例的数组,并返回一个新的 Promise 实例。新 Promise 实例将会在数组中第一个完成的 Promise 实例完成的时候被完成,它的结果将是第一个成功或失败的实例的结果。

```javascript

const promise1 = new Promise(resolve => {

setTimeout(() => {

resolve('我是 promise1!');

}, 1000);

})

const promise2 = new Promise((resolve, reject) => { setTimeout(() => {

reject('我是 promise2!');

}, 2000);

})

Promise.race([promise1, promise2]).then(result => {

console.log(result); // 我是 promise1!

}).catch(error => {

console.log(error); // 我是 promise2!

})

```

上述代码中,Promise.race() 方法接收一个 promise1 和 promise2 组成的数组,它们的结果先后完成,promise1 的 resolve 时间为 1 秒,promise2 的 reject 时间为

2 秒。新的 Promise 实例将会在第一个完成的 Promise 实例 resolve 或 reject 完成之后,完成并返回相应结果。此例中,因为 promise1 运行速度快,因此新的 Promise

实例的结果是 '我是 promise1!'。

6. Promise.resolve() 和 Promise.reject()

Promise.resolve() 和 Promise.reject() 分别用于创建已经成功完成或失败的

Promise。它们的语法如下:

```javascript

const resolvedPromise = Promise.resolve('已完成的 Promise');

const rejectedPromise = Promise.reject('失败的 Promise');

```

resolvedPromise 是状态为 fulfilled 并且结果为 '已完成的 Promise' 的

Promise 实例,rejectedPromise 是状态为 rejected 并且结果为 '失败的 Promise' 的

Promise 实例。在实际开发中,它们一般用于处理异步代码中的一些简单操作,如返回一个空数组等情况。

四、Promise 的应用场景

Promise 在实际开发中有很多用处,比如: 2. 防止回调地狱

在异步代码中,如果操作较多,嵌套较深,就容易产生回调地狱。而 Promise 可以通过进行链式调用,来避免回调地狱的问题。

3. 统一处理异步代码

在异步代码中,不同的模块可能需要处理相同的异步代码。使用 Promise 将异步操作封装起来,可以实现异步代码的复用,提高代码的简洁性和可维护性。

五、总结

Promise 是一种管理异步操作,并处理异步操作结果的方法。Promise 使得异步代码的编写更加优雅,也避免了回调地狱的问题。Promise 的基本用法主要包括创建 Promise

实例、状态转换、链式调用、Promise.all()、Promise.race()、Promise.resolve() 和

Promise.reject() 等。在实际开发中,我们经常使用 Promise 处理异步代码,有效提高了开发效率和代码的可维护性。