JavaScript
async/await
Promise 只解决了回调场景中的状态处理问题,没有解决回调嵌套问题,也没有解决回调嵌套的可读性问题 async/await 是一个语法糖,本质还是一个 Promise,来解决回调嵌套问题 普通回调嵌套 Promise 回调嵌套 async/await 解决回调嵌套 async 声明回调环境函数 await 是运行等待回调结果中 如何捕获 async/await 的异常 try/catch to…
Promise 只解决了回调场景中的状态处理问题,没有解决回调嵌套问题,也没有解决回调嵌套的可读性问题 async/await 是一个语法糖,本质还是一个 Promise,来解决回调嵌套问题 普通回调嵌套 Promise 回调嵌套 async/await 解决回调嵌套 async 声明回调环境函数 await 是运行等待回调结果中 如何捕获 async/await 的异常 try/catch to…
Promise 只解决了回调场景中的状态处理问题,没有解决回调嵌套问题,也没有解决回调嵌套的可读性问题
async/await 是一个语法糖,本质还是一个 Promise,来解决回调嵌套问题
function increase(num, callback) {
setTimeout(() => {
if (!(num >= 0)) {
callback(new Error('The parameters must be greater than zero'), null);
} else {
let result = num + 1;
callback(null, result);
}
}, 100);
}
increase(1, (err, result1) => {
if (!err) {
console.log(`result1 = ${result1}`);
increase(result1, (err, result2) => {
if (!err) {
console.log(`result2 = ${result2}`);
increase(result2, (err, result3) => {
if (!err) {
console.log(`result3 = ${result3}`);
} else {
console.log(err);
}
});
} else {
console.log(err);
}
});
} else {
console.log(err);
}
});
// 输出
// result1 = 2
// result2 = 3
// result3 = 4
function increase(num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (!(num >= 0)) {
reject(new Error('The parameters must be greater than zero'));
} else {
let result = num + 1;
resolve(result);
}
}, 100);
});
}
increase(1)
.then((result1) => {
console.log(`result1 = ${result1}`);
increase(result1)
.then((result2) => {
console.log(`result2 = ${result2}`);
increase(result2)
.then((result3) => {
console.log(`result3 = ${result3}`);
})
.catch((err) => console.log(err));
})
.catch((err) => console.log(err));
})
.catch((err) => console.log(err));
// 输出
// result1 = 2
// result2 = 3
// result3 = 4
async 声明回调环境函数 await 是运行等待回调结果中
function increase(num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (!(num >= 0)) {
reject(new Error('The parameters must be greater than zero'));
} else {
resolve(num + 1);
}
}, 100);
}).catch((err) => console.log(err));
}
// 声明任务环境
async function envIncrease() {
let num = 1;
// 等待回调任务结果1返回
let result1 = await increase(num);
console.log(`result1 = ${result1}`);
// 等待回调任务结果2返回
let result2 = await increase(result1);
console.log(`result2 = ${result2}`);
// 等待回调任务结果3返回
let result3 = await increase(result2);
console.log(`result3 = ${result3}`);
return result3;
}
// 声明任务环境
async function env() {
// 等待 环境 Increase 的结果返回
let result = await envIncrease();
console.log(`result = ${result}`);
}
// 运行环境
env();
// 输出
// result1 = 2
// result2 = 3
// result3 = 4
// result = 4
async function getData() {
try {
const result = await AsyncApi();
console.log(result);
} catch (error) {
console.log(error);
}
}
getData();
// 输出
// ReferenceError: AsyncApi is not defined
function catchError(promise) {
if (!promise || !Promise.prototype.isPrototypeOf(promise)) {
return new Promise((resolve, reject) => {
reject(new Error('requires promises as the param'));
}).catch((err) => {
return [err, null];
});
}
return promise
.then(function() {
return [null, ...arguments];
})
.catch((err) => {
return [err, null];
});
}
function getData2() {
return new Promise((resolve, reject) => {
resolve(1);
});
}
async function asyncFunc() {
const [err, result] = await catchError(getData2());
if (err) {
console.log('Promise有错:', err);
} else {
console.log(result);
}
}
asyncFunc();
// 输出
// 1
暂无评论
确认操作
请再次确认编辑图片
待上传图片 (剩余 0 张)
项目详情
确认评论邮箱
邀请制评论