一,异步操作对象
Promise 是 JavaScript 中用于处理异步操作的对象,它代表一个异步操作的最终完成(或失败)及其结果值。
Promise是一个对象,它有三种状态:
- pending(待定):初始状态。
- fulfilled (已兑现):操作成功完成。
- rejected(已拒绝):操作失败。
如果一个 Promise 已经被兑现或拒绝,即不再处于待定状态,那么则称之为已敲定(settled)。
Promise的创建与使用:
链式调用的基本原理:
Promise 的 .then() 和 .catch() 方法都会返回一个新的 Promise,这使得我们可以连续调用这些方法,形成链式结构。
链式调用的关键特点:
1.顺序执行: 每个.then()会等待前一个Promise解决后才执行。
2.值传递:前一个处理函数的返回值会传递给下一个处理函数。
3.错误冒泡:链中任何一个环节出错都会跳过后续.then()直到遇到.catch()。
promise静态方法
1.Promise.resolve()
创建一个立即 resolved的Promise:
```
```Promise.resolve('立即解析的值)
.then( value => console.log(value));
2. Promise.reject()
创建一个立即 rejected的Promise:
```
```Promise.reject('立即拒绝的原因')
.catch(reason>console.error(reason));
3. Promise.all()
等待所有 Promise完成:
```
```Promise.al1([promise1,promise2.promise3])
.then(values{
console.log('全部完成:',values);
})
.catch(error ={
console.error('至少一个失败:',error);
});
4. Promise.race()
取最先完成的Promise:
```
```Promise.race([promise1,promise2])
.then( value=>(
console.log('最先完成的:',value);
});
注意事项
1.不要忘记返回:在.then()中如果进行异步操作,必须返回Promise
```
```//错误示例
somePromise.then( result =>{
anotherAsyncOperation(result);//没有return});
});
//正确示例
somePromise.then( result =>{
return anotherAsyncOperation(result); //返回Promise
})
2.错误处理位置: .catch()可以放在链的末尾,也可以放在特定位置
3.链的长度:过长的链可能会降低可读性,可以考虑拆分成多个函数
二,异步函数
1.async 函数
功能:声明一个异步函数
特点:
-
自动将返回值包装为Promise。
-
允许函数内使用await
-
可以包含同步和异步代码
```asyno function fetchData(){ return "data"; //自动包装为Promise.resolve("data") } //等价于 function fetchData() { return Promise.resolve("data");}
2,定义方式
3.核心特性
总是返回: Promise:无论函数体返回什么,都会被自动包装为Promise
内部可以使用: await :可以暂停函数执行,等待Promise解决
错误处理:可以使用传统的try/catch语法
4,async函数返回值
三,异步操作关键字
1,await表达式
功能:暂停异步函数执行,等待Promise解决。
特点:
- 只能在 async函数内使用。
- 会"阻塞”后续代码执行(非真正阻塞线程)。
- 返回 Promise解决的值,如果拒绝则抛出异常。
async ()和 await的对比:
async 和 await 是 JavaScript 中处理异步操作的现代语法,它们基于 Promise.
async 和 await的联系: