文章目录
- 函数设计需求
- 1. 简介
- 2. 函数实现
- 3. 注意事项
- 4. 实际应用
- 5. 总结
函数设计需求
本函数解决需求如下
- 函数为封装好的异步函数
- 轮询未到终止状态时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 的处理,以便正确地执行代码。