egg-cnode中有段代码不理解,请教下为什么要用for循环 https://github.com/cnodejs/egg-cnode/blob/master/app/service/mail.js#L18
代码
for (let i = 1; i < 6; i++) { try { await transporter.sendMail(data); logger.info(‘send mail success’, data); break; } catch (err) { if (i === 5) { logger.error(‘send mail finally error’, err, data); throw new Error(err); } logger.error(‘send mail error’, err, data); } }
看起来是重试机制吧。
@atian25 重试?因为服务器不稳定吗?类似接口不稳定。看nodemailer模块样例代码没有这些
另外for循环和await一起用不理解语法,如果await没有返回,for循环还是会有下一次轮询吗
await 是表示要等待,所以如果await不返回,它是不会进入下一次循环的
@alfredLeeith 我理解也是这样,如果是这样,重试的解释就不对了
我的理解吧,如果await成功了,那就break跳出for循环了,如果一直失败,记录到日志,直到第5次,如果还是失败,则抛出异常。所以我觉得这是一个重试机制
@alfredLeeith await一直不返回会error是吗
@IEfucker await一直不返回,那就一直等呗,直到返回结果,如果成功就跳出,如果error,就被catch到了呗
@alfredLeeith 哦,await的函数栈一定会throw error。学习了,谢谢两位大神