当前端的一次操作会调用多个有关联的后台接口

由于历史原因,前端的一次操作需要调用多个后台接口,以前写的一般都是调用一个的,或者哪怕是多个,接口之间也不会有依赖。但最近做的需求里,前端一次操作需要调用两个后台接口,且这两个接口是有关联的,需要先调用接口A,再调用接口B。

一开始直接写两个Promise,一个成功后调用另一个,类似于这样子

 fetch(urlA)
	 .then((res) => {
	 	if (res.ret == 0) {
		 	fetch(urlB)
			 	.then(() => {
					///
				})
				.catch(e) {
				}
		}

	 })
	 .catch(e){
	 }

一切看上去都这么美好,直到测试同学发现第二个接口一直调用不了。

才发现自己没考虑失败情况,如果接口A调用失败了,接口B是不会调用的。那么假设用户第一次操作,调用接口A成功,但后台因为某些原因B接口临时挂了,或者因为网络问题B接口调用失败了。用户第二次操作时,接口A因为保护机制,之前已经调用过一次了,这次错误码会返回非0,这样就调用不到接口B了。而且不管用户怎么重试,都调用不到。

与后台协商后,决定采用接口A结果返回非零也去尝试调用接口B,因为前端可能因为重启app、网页、小程序,无法确保是否调用过接口A,所以用户的操作流程是调用接口A,不管接口A是否返回成功,都去调用接口B,后台对接口B的调用进行判定,会判断接口A是否已经调用,未调用则不处理。

事后回想,其实这应该是常识:

  1. 接口调用可能失败,一定要考虑失败的情况
  2. 一次操作调用多个关联的接口,要考虑若干接口可能调用失败的所有情况
  3. 前端要做到无状态,当接口调用失败后,要能够恢复,确保下次能发起请求,能正常调用接口

在前端方面,踩的坑还不够多,导致这种常识现在才知道……

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设我们有两张表,一张是用户表(user),另一张是订单表(order),它们之间是一对多的关系,即一个用户可以有多个订单。现在我们要查询用户表中所有年龄大于18岁的用户及其对应的订单信息,并将结果输出到前页面。 首先,在ThinkAdmin6中创建好用户表和订单表的模型类,然后在控制器中编写如下代码: ```php // 夺表查询 $users = UserModel::where('age', '>', 18)->select(); $orders = OrderModel::where('user_id', 'in', array_column($users, 'id'))->select(); // 数据关联 foreach ($users as &$user) { $user['orders'] = array_filter($orders, function ($order) use ($user) { return $order['user_id'] == $user['id']; }); } // 输出到前 $this->assign('users', $users); $this->display(); ``` 以上代码中,我们首先使用where条件过滤出年龄大于18岁的用户,然后再使用in条件查询出这些用户对应的订单信息。接着,我们使用一个循环将订单信息和用户信息关联起来,并将结果输出到前页面。 最后,我们在前页面使用模板语言(如Smarty)渲染出用户信息和订单信息,例如: ```html {foreach $users as $user} <div> <p>{$user.name},{$user.age}岁</p> <ul> {foreach $user.orders as $order} <li>订单号:{$order.order_no},金额:{$order.amount}</li> {/foreach} </ul> </div> {/foreach} ``` 这样就可以将查询结果展示在前页面上了。 ### 回答2: 使用thinkadmin6来编写夺表查询并输出前可以按照以下步骤进行操作: 1. 在thinkadmin6项目中创建一个新的模型,用于定义需要查询的数据表。可以通过编写模型文件,指定数据表的名称、字段等信息。 2. 在thinkadmin6项目中创建一个新的控制器,用于编写夺表查询的方法。可以在该方法中使用模型来进行数据库查询操作。 3. 编写前页面,用于展示查询结果。可以使用HTML、CSS和JavaScript等技术来设计页面,并通过AJAX等方式与后台控制器进行数据交互。 4. 在控制器方法中,根据查询结果将数据传递给前页面。可以使用模板引擎等技术来渲染页面,并将查询结果动态地展示在页面上。 5. 在前页面中,通过JavaScript等技术处理后台传递的数据,对查询结果进行展示和操作。可以根据具体需求设计表格、图表等方式来展示数据。 6. 配置路由,使得前页面可以通过指定URL来访问到对应的控制器方法。 7. 启动thinkadmin6项目,并在浏览器中访问前页面的URL,即可执行夺表查询并将查询结果展示在前页面上。 总结起来,使用thinkadmin6进行夺表查询并输出前的步骤包括创建模型、编写控制器方法、设计前页面、交互数据、配置路由和启动项目。通过这些操作,可以实现从后台查询数据到前展示的功能。 ### 回答3: 首先,thinkadmin6是一个功能强大且易于使用的后台管理系统。在该系统中,可以使用其提供的查询功能进行夺表查询。 要实现夺表查询并输出到前,可以按照以下步骤进行: 1. 在thinkadmin6的后台管理系统中创建一个新的数据表,并定义其相关字段,确保有足够的数据用于查询。 2. 在后台管理系统中创建一个新的控制器,用于处理夺表查询的逻辑。可以将该控制器命名为"TableController"。 3. 在TableController中创建一个方法来处理夺表查询的请求。可以命名该方法为"queryTable"。 4. 在queryTable方法中,使用thinkadmin6提供的查询语句构造器进行夺表查询。可以使用链式调用方法来组合查询条件,例如where、join、field等。 5. 执行查询后,将查询结果传递给前页面进行展示。可以使用模板引擎将查询结果渲染到前页面中,并通过render方法输出到前。 6. 在前页面中,使用HTML、CSS和JavaScript来展示查询结果。可以根据需求设计合适的布局和样式,使查询结果易于阅读和使用。 7. 最后,保存并运行该控制器,在浏览器中访问相关的网址,即可看到夺表查询的结果在前页面展示出来。 总结起来,使用thinkadmin6进行夺表查询并输出到前的步骤包括创建数据表、编写控制器方法、使用查询语句构造器进行查询、将查询结果传递给前页面、设计前页面展示查询结果等。通过这些步骤的操作,可以在thinkadmin6中实现夺表查询并输出到前

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值