小程序
小游戏
企业微信
微信支付
扫描小程序码分享
不知道wx.request有内置的重试机制m啊?看上去像没有的样子。如果没有的话,在外层,有人有成熟的重试支持的代码吗?感谢。
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
github上有改造成axios的:
https://github.com/GreenPomelo/wx-axios
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
自己简单写一个啊
fucntion postRequest(params){ wx.request({ ...params, }) } fucntion retry(params,t=1){ var tt = 0; var complete = params.complete; delete params.complete; var nP = { ...params, fail(res){ tt++; if(tt>=t){ params.fail&& params.fail(res) }else{ postRequest(nP); } }, complete(){ if(tt>=t){ complete && complete (res) } } } postRequest(nP) }
最后,我结合了stackoverflow上的答案
https://stackoverflow.com/questions/38213668/promise-retry-design-patterns
写了如下的支持。该代码开源在
https://git.weixin.qq.com/jiji-opensouce/wx-xcx-empty-template/blob/master/utils/retry.js
const wait = ms => new Promise(r => setTimeout(r, ms)); const asyncRetry = (asyncFn, delay, retries, canRetry = ()=>true) => new Promise((resolve, reject) => { return asyncFn() .then(resolve) .catch((reason) => { if (retries > 1 && canRetry(reason)) { return wait(delay) .then(asyncRetry.bind(null, asyncFn, delay, retries - 1)) .then(resolve) .catch(reject); } return reject(reason); }); }); // 使用示例: retry.asyncRetry(()=> request({ url: xxx, method: "GET" }), 200, 3);
可以看下这篇文章
https://mp.weixin.qq.com/s/ldLZSRypuQuVwmSvqCF0Zg
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
github上有改造成axios的:
https://github.com/GreenPomelo/wx-axios
自己简单写一个啊
fucntion postRequest(params){ wx.request({ ...params, }) } fucntion retry(params,t=1){ var tt = 0; var complete = params.complete; delete params.complete; var nP = { ...params, fail(res){ tt++; if(tt>=t){ params.fail&& params.fail(res) }else{ postRequest(nP); } }, complete(){ if(tt>=t){ complete && complete (res) } } } postRequest(nP) }
最后,我结合了stackoverflow上的答案
https://stackoverflow.com/questions/38213668/promise-retry-design-patterns
写了如下的支持。该代码开源在
https://git.weixin.qq.com/jiji-opensouce/wx-xcx-empty-template/blob/master/utils/retry.js
const wait = ms => new Promise(r => setTimeout(r, ms)); const asyncRetry = (asyncFn, delay, retries, canRetry = ()=>true) => new Promise((resolve, reject) => { return asyncFn() .then(resolve) .catch((reason) => { if (retries > 1 && canRetry(reason)) { return wait(delay) .then(asyncRetry.bind(null, asyncFn, delay, retries - 1)) .then(resolve) .catch(reject); } return reject(reason); }); }); // 使用示例: retry.asyncRetry(()=> request({ url: xxx, method: "GET" }), 200, 3);
可以看下这篇文章
https://mp.weixin.qq.com/s/ldLZSRypuQuVwmSvqCF0Zg