面试题答案
一键面试设计思路
- 库存检查:首先调用库存检查的异步函数,确认商品库存是否足够。
- 支付处理:在库存检查通过后,进行支付处理。由于支付处理是异步操作,使用
async/await
等待支付结果。 - 订单记录:支付成功后,记录订单信息。同样,订单记录也是异步操作,需要等待其完成。
通过这种顺序执行异步操作的方式,确保每个步骤之间的依赖关系得到满足,同时利用async/await
简洁地处理异步逻辑,保证数据一致性和操作的可靠性。
核心代码示例
// 模拟库存检查函数
Future<bool> checkStock() async {
// 模拟异步操作,例如从服务器获取库存信息
await Future.delayed(const Duration(seconds: 1));
return true; // 返回库存是否足够
}
// 模拟支付处理函数
Future<bool> processPayment() async {
// 模拟异步操作,例如调用支付接口
await Future.delayed(const Duration(seconds: 2));
return true; // 返回支付是否成功
}
// 模拟订单记录函数
Future<void> recordOrder() async {
// 模拟异步操作,例如将订单信息保存到数据库
await Future.delayed(const Duration(seconds: 1));
}
Future<void> placeOrder() async {
try {
// 检查库存
bool hasStock = await checkStock();
if (!hasStock) {
print('库存不足,无法下单');
return;
}
// 处理支付
bool paymentSuccess = await processPayment();
if (!paymentSuccess) {
print('支付失败');
return;
}
// 记录订单
await recordOrder();
print('订单下单成功');
} catch (e) {
print('下单过程中出现错误: $e');
}
}
调用placeOrder
函数即可启动整个下单流程。在实际应用中,上述模拟函数应替换为真实的与服务器交互或数据库操作的异步函数。