前言
接触promise有一段时间了,不管是自己从书上、看视频教学、看他人的博客记录,感觉都没有很细致的了解promise,promise到底是干嘛的?为什么有resolve、reject还要有then、catch、Promise.resolve等函数?我到底怎么才能用到promise?为什么面试的时候需要我写一个promise? 这些都是我遇到的一些问题,下面是我微薄的见解与记录,希望看完能帮到读者一点点。
promise的初始了解
promise基本概念
Promise是JavaScript中的一种异步编程解决方案,它表示一个异步操作的最终完成或失败,并返回一个结果或错误信息。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当Promise对象处于pending状态时,可以注册回调函数来在Promise对象状态改变时执行。当Promise对象状态变为fulfilled或rejected时,会调用对应的回调函数。Promise可以链式调用,这种方式称为Promise链。
Promise的状态与值介绍
1、Promise的状态介绍
1. Pending(进行中):初始化状态,表示Promise对象正在执行异步操作,尚未完成。
2. Fulfilled(已成功):异步操作成功完成,Promise对象的状态从Pending变为Fulfilled,此时会调用then()方法中的第一个回调函数。
3. Rejected(已失败):异步操作执行失败,Promise对象的状态从Pending变为Rejected,此时会调用then()方法中的第二个回调函数,或者catch()方法中的回调函数。
2、promise对象中的值
-
Promise对象中的值可以是任何JavaScript数据类型,包括字符串、数字、布尔值、数组、对象等等。通常情况下,Promise对象的值是异步操作的结果,例如从服务器获取的数据或者成功执行的操作结果。在Promise对象中,值通常被称为“解决值”(resolved value),它可以通过Promise的then()方法或者catch()方法获取。如果Promise对象被拒绝(rejected),则会返回一个错误对象作为拒绝值(rejected value)。
创建一个promise
可以使用Promise构造函数来创建一个promise对象。例如:
const myPromise = new Promise((resolve, reject) => {
// 在这里编写异步操作的代码
// 如果异步操作成功,则调用resolve()方法并传入结果
// 如果异步操作失败,则调用reject()方法并传入错误信息
});
//在这个promise中,我们可以编写异步操作的代码,并根据操作结果调用resolve或reject方法。例如,下面是一个简单的例子:
const myPromise = new Promise((resolve, reject) => {
const randomNumber = Math.floor(Math.random() * 10);
if (randomNumber < 5) {
resolve(`The random number is ${randomNumber}`);
} else {
reject(`The random number is ${randomNumber}`);
}
});
myPromise.then(result => {
console.log(result);
}).catch(error => {
console.error(error);
});
//在这个例子中,我们生成一个随机数,并根据随机数的大小来决定是调用resolve还是reject。然后,我们使用then方法来处理resolve的结果,使用catch方法来处理reject的错误信息。
代码案例知识点讲解
-
Promise 是 JavaScript 中一种非常重要的异步编程方法,它可以让我们更加方便、优雅地处理异步操作,避免了回调函数嵌套的问题。 下面是一个 Promise 的简单示例: ``` function getData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('success'); }, 1000); }); } getData().then(result => { console.log(result); }).catch(error => { console.log(error); }); ``` 这个例子中,我们定义了一个名为 `getData` 的函数,它返回了一个 Promise 对象。在 Promise 的构造函数中,我们使用了 `setTimeout` 来模拟一个异步操作,1 秒后将 Promise 的状态改为 resolved,返回值为字符串 'success'。 在 `getData` 函数被调用后,我们使用了 `.then()` 方法来处理 Promise 对象的 resolved 状态。在这个例子中,我们简单地将 resolved 的返回值打印到控制台中。我们还使用了 `.catch()` 方法来处理 Promise 对象的 rejected 状态,如果出现了错误则将错误信息打印到控制台中。 这个例子中,我们涉及到了 Promise 的以下几个知识点: 1. Promise 的构造函数接受一个函数作为参数,这个函数有两个参数,分别是 resolve 和 reject。在异步操作完成后,我们可以使用 resolve 或 reject 方法来改变 Promise 的状态和返回值。 2. Promise 对象有三种状态:pending、resolved 和 rejected。在异步操作完成后,我们可以使用 resolve 或 reject 方法来改变 Promise 的状态和返回值。Promise 一旦状态改变,就不会再变化。 3. Promise 对象有两个方法,分别是 `.then()` 和 `.catch()`。当 Promise 对象的状态变为 resolved 时,会执行 `.then()` 方法中的回调函数;当 Promise 对象的状态变为 rejected 时,会执行 `.catch()` 方法中的回调函数。 4. `.then()` 方法和 `.catch()` 方法都可以链式调用,可以在一个 Promise