[英]Use loop inside async await provide eslint error
我有以下有效的代码,我目前配置 eslint 并收到以下错误
1. ESLint: iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations. (no-restricted-syntax)
2. ESLint: Unexpected `await` inside a loop. (no-await-in-loop)
代码思路如下:
在包含帐户列表的全局帐户上循环(首先是)
为欧盟地区准备请求
为美国地区准备请求
运行异步请求以从欧盟获取用户
循环该值,如果找到 url,则返回 6 - 7 与 4-5 相同,但适用于美国地区
async function acount(global) { // here i got the first eslint error iterators/generators for (const account of global) { // create http request for getting the users - region EU let usersEUReq = getUsers(account.guid, region.1); // create http request for getting the users region US let usersUSReq = getUsers(account.guid, region.2); const usersEU = await axios(usersEUReq); // here I got the response from the promise and should loop on it got get URL for (const sub of usersEU.data) { if (sub.url) { return sub.url } } const usersUS = await axios(usersUSBReq); for (const sub of usersUS.sub) { if (sub.url) { return sub.url } } }
顺便说一句,我不能使用Promise.all
或race
,因为我需要为欧盟和美国运行代码
除非您明确想要连续循环等待的承诺,否则您应该使用Promise.all
或Promise.race
(或Promise.any()
当所有主流浏览器都支持时)。 他们将同时履行您的承诺。
例如:
function getuserdata(account) {
return [region.1, region.2].map(_region => getUsers(account.guid, _region)).map(axios);
}
async function acount(global) {
let userdata = await Promise.all(global.flatMap(getuserdata))
for (const sub of userdata) {
if (sub.url) {
return sub.url
}
}
}
如果你真的想做一个串行循环,那么你所拥有的就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.