繁体   English   中英

在异步等待中使用循环提供 eslint 错误

[英]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)

代码思路如下:

  1. 在包含帐户列表的全局帐户上循环(首先是)

  2. 为欧盟地区准备请求

  3. 为美国地区准备请求

  4. 运行异步请求以从欧盟获取用户

  5. 循环该值,如果找到 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.allrace ,因为我需要为欧盟和美国运行代码

除非您明确想要连续循环等待的承诺,否则您应该使用Promise.allPromise.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM