在这段代码中,变量p3是一个Promise对象。Promise.resolve()方法会返回一个已经resolved的Promise对象,该对象的状态是fulfilled。 而在这个Promise对象上调用then方法时,传入了一个匿名函数,这个函数里面会直接抛出一个Error异常,所以这个Promise对象的状态就会变成rejected. 所以这段代码中打印出来的p3的状态是rejected。为什么p3的状态从pending变为fulfilled后还可以从fulfilled变为rejected
时间: 2023-02-08 16:53:19 浏览: 87
在 JavaScript 中,Promise 是一种用来管理异步操作状态的对象。在这段代码中,变量 p3 是一个 Promise 对象。使用 `Promise.resolve()` 方法会返回一个已经 resolve 的 Promise 对象,这个对象的状态为 fulfilled。
当在这个已经 fulfilled 的 Promise 对象上调用 then 方法时,传入了一个匿名函数,这个函数里面会直接抛出一个 Error 异常,所以这个 Promise 对象的状态就会变成 rejected。所以这段代码中打印出来的 p3 的状态是 rejected。
Promise 对象的状态是不可逆的,一旦状态变为 fulfilled 或 rejected,就不能再次改变了。但是,在这种情况中,Promise.resolve()返回的Promise对象,已经 resolved 后直接变成 rejected 是因为then方法中的函数导致的,这个函数并没有改变Promise对象的状态,而是在等待状态改变后进行了错误处理,所以会被判断为rejected.
相关问题
js 中怎么在async 函数中返回一个普通值不返回promise对象?
在一个 async 函数中,如果返回一个普通值,它会被自动包装在一个 Promise 对象中并使用 Promise.resolve() 方法进行返回。如果你想要返回一个普通值,而不是 Promise 对象,你可以使用如下两种方法之一:
1. 使用 return 语句,返回值将会被包装在一个 Promise 对象中。
```javascript
async function foo() {
return "bar";
}
```
2. 使用 Promise.resolve() 方法将普通值转换为 Promise 对象并返回。
```javascript
async function foo() {
return Promise.resolve("bar");
}
```
注意,如果你在 async 函数中抛出一个异常,它也会被自动包装在一个 Promise.reject() 方法中并返回。
不使用 Promise.all() 方法。遍历每一个Promise状态并返回状态信息
好的,以下是一个遍历每一个Promise状态并返回状态信息的示例代码:
```
const promises = [Promise.resolve('Resolved'), Promise.reject('Rejected'), Promise.resolve('Resolved')];
promises.forEach((promise) => {
promise.then(
(value) => {
console.log(`Promise ${promise} status: Resolved with value ${value}`);
},
(reason) => {
console.log(`Promise ${promise} status: Rejected with reason ${reason}`);
}
);
});
```
在这个示例代码中,我们定义了一个包含三个Promise对象的数组。然后,我们使用forEach()方法遍历每一个Promise对象,并使用then()方法在Promise对象状态变为resolved或rejected时打印出状态信息。在then()方法中,我们传入两个回调函数,一个用于处理resolved状态,一个用于处理rejected状态。在resolved回调函数中,我们打印出Promise对象的resolved状态和值,而在rejected回调函数中,我们打印出Promise对象的rejected状态和原因。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)