欢迎大家来到IT世界,在知识的湖畔探索吧!
本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!
大家好,我是大澈!
本文约 700+ 字,整篇阅读约需 1 分钟。
今天分享一段优质 JS 代码片段,很秒的实现了对异步请求的超时控制。
老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!
// 如果在指定的毫秒数内未返回,则拒绝并显示“超时”错误 const timeout = (promise, ms) =>Promise.race([promise, newPromise((_, reject) => setTimeout(() => reject(newError("Timeout")), ms))]); timeout(fetch("https://api.riki.wang"), 5000) .then(() =>"handleResponse") .catch(() =>"handleError");
欢迎大家来到IT世界,在知识的湖畔探索吧!
分享原因
这段代码展示了如何通过 Promise.race 方法,来巧妙实现对异步操作的超时控制。
这在处理网络请求或其他可能耗时的操作时非常有用,可以避免长时间的等待导致的不良用户体验。
代码解析
1. Promise.race()
Promise.race() 方法是 JavaScript 中 Promise 对象的一个方法。
它用于并行执行多个 Promise 实例,并返回第一个完成(无论是成功完成还是失败拒绝)的 Promise 的结果,且其他 Promise 的结果会被忽略。
这里定义了一个名为 timeout 的函数,它接受一个 promise 对象和一个毫秒数 ms 作为参数。
在这个函数中,创建了一个新的 Promise ,它会在指定的 ms 毫秒后通过 reject 抛出一个 Timeout 错误。然后将这个新创建的 Promise 和传入的 promise 一起传递给 Promise.race 。
2. timeout(fetch, 5000)
调用 timeout 函数,并将 fetch 操作 和 超时时间 5000 毫秒作为参数传入。
如果在 5000 毫秒内 fetch 操作完成,就会进入 then 回调,执行 “handleResponse” 。
如果在 5000 毫秒内 fetch 操作未完成,那么由 setTimeout 创建的 Promise 会抛出 Timeout 错误,导致进入 catch 回调,执行 “handleError” 。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/89547.html