如何在 Vue 组件中用 setInterval 函数来实现每隔一定时间发送请求的功能

今天做项目的过程中,遇到一个需求,具体需求为uniapp连接了读卡器,原本点读卡会发送一次请求,后面发现非常不方便,因为点读卡,但标签未放置到读写器时,会立刻显示读卡失败,此时还需要再次手动点击读卡。操作比较麻烦

建议:要修改一下逻辑。点读卡后,每200-300ms尝试读一次(大概),持续5秒,仍未独到卡,提示失败。读的过程中,随时可以关掉(停止)

于是决定用  setInterval 函数来实现每隔一定时间发送请求的功能。

<view class="form-top">
				<view class="form-left">
					<view class="form-search flex align-center">
						<input v-model="searchValue" class="input" type="text" placeholder="请输入" maxlength="30" />
						
						<view class="form-read flex align-center" @click="openCard()">
							读卡
						</view>
					</view>
				</view>
			</view>

<script>
export default {
  data() {
    return {
      requestStatus: null,
      intervalId: null,
      requestCount: 0
    };
  },
  methods: {
    //关闭弹窗
		closePop() {
			this.showCard = false;
			this.requestCount = 0;
			clearInterval(this.intervalId);
		},
    //读卡弹窗
	openCard() {
				this.requestStatus = null;
				this.requestCount = 0;
				this.showCard = true;
				this.intervalId = setInterval(() => {
					this.requestCount++;
					if (this.requestCount > 20) {
						uni.showToast({
							title: '读卡失败',
							icon: "none",//图标
						});
						this.stopRequest();
						this.showCard = false;
						return;
					}
					this.sendRequest();
				}, 250);
			},
			stopRequest() {
				this.requestCount = 0;
				clearInterval(this.intervalId);
			},
			sendRequest() {
				// 发送请求的代码
				uhfg.readRFID(result => {
					let data = result.data;
					if (result.code == 200) {
						if(data) {
							this.stopRequest();
							this.showCard = false;
							this.$tab.navigateTo(
								`/pages/result?id=${this.farmId}&rfid=${data}`
							);
						}else {
							this.stopRequest();
							this.showCard = false;
							uni.showToast({
								title: '标签无效请重试',
								icon: "none",//图标
							})
						}
					}else {
						this.stopRequest();
						this.showCard = false;
						uni.showToast({
							title: result.message,
							icon: "none",//图标
						})
					}

				});
			},
  }
};
</script>

点击读卡之后,就会持续触发连接操作,如下图(报错忽略,这里没连接,只做演示)

在这个示例中,我们创建了一个名为 startRequest 的方法,它会在按钮被点击时触发。在这个方法中,我们首先将 requestStatus 设置为 null,表示请求尚未开始。然后,我们使用 setInterval 函数创建一个定时器,每隔200ms发送一次请求。在每次请求之前,我们会检查请求次数是否超过了25次,如果超过了,就停止请求,并将requestCount还原为0。如果请求次数没有超过25次,就调用 sendRequest 方法发送请求。

在 sendRequest 方法中,我们使用 setTimeout 函数模拟请求。在这个示例中,我们随机生成一个布尔值,表示请求是否成功。如果请求成功,我们会停止定时器,并关闭弹窗,还原requestCount

另外,我们还创建了一个名为 stopRequest 的方法,它会在另一个按钮被点击时触发,用于停止请求。

在 Vue 组件中实现每隔一定时间发送请求的功能。在实际开发中,根据具体的需求进行更多的配置和数据处理。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值