JavaScript 心跳函数封装-轮询接口查询数据状态

函数设计需求

本函数解决需求如下

  • 函数为封装好的异步函数
  • 轮询未到终止状态时promise始终为padding状态
  • 轮询未到终止态时需求每五秒请求一次接口
  • 轮询接口为waitingCheckImportV2
  • 状态值success为成功
  • 状态值failed为成功

1. 简介

本心跳函数是一个异步函数,其作用是对传入的 id 进行连续访问,直到访问成功为止。在每次访问时,函数会等待五秒后再进行下一次访问。如果访问成功,则返回一个 resolved 状态的 Promise,其值为 id;否则返回一个 rejected 状态的 Promise。

在实际应用中,该函数通常被用于监控某个操作的完成情况,例如上传文件至服务器或导入数据到数据库。

2. 函数实现

函数主体代码如下:

async function continuousAccess(id) {
    
    
  await new Promise((resolve) => setTimeout(() => resolve(), 5000))
  const {
    
     data, msg } = await waitingCheckImportV2({
    
     threadName: id })
  if (data === 'success') {
    
    
    return Promise.resolve(id)
  }
  if (data === 'failed') {
    
    
    ElMessage.error(msg || '计算失败')
    return Promise.reject()
  }
  return continuousAccess(id)
}

其中,await new Promise((resolve) => setTimeout(() => resolve(), 5000)) 表示等待五秒后再执行下一步操作。

接着,通过调用另一个异步函数 waitingCheckImportV2,获取指定 id 的状态信息(包括数据和信息)。如果数据为 ‘success’,即访问成功,则返回一个 resolved 状态的 Promise,其值为 id;如果数据为 ‘failed’,即访问失败,则调用 ElMessage.error 方法输出错误信息,并返回一个 rejected 状态的 Promise;否则继续进行下一次访问。

如果连续访问多次仍然没有成功访问,则函数会不断地递归调用自身,直到访问成功为止。

3. 注意事项

  • 函数中必须传入参数 id,否则函数无法执行;
  • 在使用该函数前,需要先定义异步函数 waitingCheckImportV2(轮询目的函数),并确保其能够获取指定 id 的状态信息;
  • 调用函数后,应该对返回的 Promise 进行处理,以便在访问成功或失败时做出相应的操作。

4. 实际应用

在实际应用中,可以使用如下代码对心跳函数进行调用:

continuousAccess(someId)
  .then(id => {
    
    
    console.log(`访问 ${
      
      id} 成功!`)
    // 执行成功后的操作
  })
  .catch(() => {
    
    
    console.log('访问失败!')
    // 执行失败后的操作
  })

其中,someId 是需要访问的目标 id。在访问成功时,将输出“访问 someId 成功!”;在访问失败时,将输出“访问失败!”。可以根据实际需求,在相应位置添加需要执行的操作。

5. 总结

本心跳函数是一个简单而实用的异步函数,主要用于监控某个操作的完成情况。其实现方式相对简单,适用性强,可以在很多场合得到应用。在使用该函数时,需要注意传参和 Promise 的处理,以便正确地执行代码。

猜你喜欢

转载自blog.csdn.net/weixin_44599143/article/details/130504807