发布时间:2024-01-10 19:00
async介绍:
1.es7 的 语法
2.通常和这个promise联合使用
3. 这个 async/await语法 也是异步代码用同步代码的写法
async 异步的 修饰一个函数
await async wait 异步的等待 等待我们上面的函数完成
* 1. 简单的写个 函数 调用 输出结果 hello async
* 2. 函数加个 修饰符 async 输出的结果 是 Promise对象
* 3. 分析结果 async 给函数 自动包裹了一层 Promise resolve()函数
* 4. 取值 取出函数的返回值 promise.then() 脱壳
* 5. promise.then().catch()对应 reject()
*/
async 代码示范
async function testAsync(flag) {
if (flag) {
return "hello async"
} else {
throw "抛出异常"
}
}
// let result = testAsync()
// console.log(result);
testAsync().then(res=>{
console.log("res:",res);
})
console.log("async后面,但是先于async的代码执行");
console.log(testAsync(true)); // async 包了一层 Promise.resolve()
console.log(testAsync(false));// async 包了一层 Promise.reject()
testAsync(false).then(res=>{
console.log("res-1-1-",res);
}).catch(error=>{
console.log("res错误:",error);
})
awiat
1. await 规定只能在 async 函数中使用 ,用在普通函数会报错
2. await 放在 Promise调用之前 ,强制等待后面代码的执行,直到promise对象 resolce,得到resoleve的值
通过await调用之后返回值不再是promise,而是promise.then时所传递的数据(如果失败则会抛异常) 我称为 “脱壳”
function testPromise() {
return new Promise((resolve,reject)=>{
// 模拟异步
setTimeout(()=>{
resolve("测试 原生 promise")
},2000)
})
}
async function testAs() {
let r1 = await testAsync(true)
// 再次证明 async 函数如果不是promise 会自动包裹一层promise
console.log("测试结果-1:",r1);
let r2 = await testPromise()
// 如果async 函数已经是 promise了 就不用自己在包裹了
console.log("测试结果-2:",r2);
//***** await catch 怎么写
try {
// true/ false 自己测试
let r3 = await testAsync(false)
console.log("测试结果-3:",r3);
} catch (error) {
console.log("测试结果-错误-3:",error);
}
}
testAs()