javascript - JavaScript 函数中的延迟循环

标签 javascript axios

我有多个 API 调用,用于删除自动测试的用户数据。

首先我得到一个访问 token

    async function getAccessToken(email, pwd) {
    try {
        const form = {email: email, password: pwd};
        let config = {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            }
        };
        const accessToken = await axios.post(`${process.env.API_URL}/test/token`, qs.stringify(form), config);
        console.log(accessToken.data.data.accessToken);
        return accessToken.data.data.accessToken
    }
    catch(e) {
        console.error(``+email+` produced the Error = ` + e);
        return 0;
    }
}

然后我使用该 token 删除所需的数据

 async function TMDeleteAllGoals (emailAddress) {
    try {
        var accessToken = await setup.getAccessToken(emailAddress, 'Test4321');
        var userId = await user.getUserId(emailAddress);
        var goalids = await getAllTMGoalID(emailAddress);
        console.log(`Deleting all goals for ` + emailAddress + ``);
        for (const goalid of goalids) {
            const response = await axios.delete(`${process.env.TM_API_URL}/test/users/`+userId+`/goals/`+goalids+``, {'headers': {Authorization: 'Bearer ' + accessToken + ''}});
        }
    }
    catch(e) {
        console.error(``+emailAddress+` produced the Error = ` + e);
        return 0;
    }
}

然后我需要为 1000 个不同的用户运行它,所以我使用循环执行

var i;
for (i = 1; i < 1001; i++) {
    //console.log(i);
    deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
}

我遇到的问题是,这里似乎是获取访问 token 的并发调用的最大值(尚不确定限制是多少)。因此,如果我用太多用户点击它,它将开始返回 null 而不是 token 。

有没有办法可以在循环中的每个调用之间设置超时,以尝试减慢速度。我已经尝试过这个,但它没有执行任何操作。

const timeout = ms => new Promise(res => setTimeout(res, ms));
async function deleteTheGoals () {
    for (var i = 1; i < 1001; i++) {
        //console.log(i);
        await timeout(500);
        const deleteGoals = await deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
    }
}

最佳答案

您的服务器中可能有最大请求配置,因此即使您设置了超时,也不能保证请求会在 500 毫秒之前结束。 为什么不陆续发送呢?

async function arraysWithAllIndexes(array) {
  for(const i of array) {
    await deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
  }
};

关于javascript - JavaScript 函数中的延迟循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59180752/

相关文章:

javascript - React.js + axios : How do I avoid hard coding data on my datatable?

javascript - 如何将身份验证 header 传递给其他组件

javascript - onSelect 选项与 get 请求

javascript - Vuejs :ajax validation error messages not displaying

javascript - 如何用 ES6 类模拟私有(private)作用域?

javascript - 在 for 循环中错误地传递回调参数

javascript - 将收藏夹按钮添加到 html 表格

javascript - 当 div 内的标签具有内联文本对齐以对齐时,如何在 div 左侧对齐文本

javascript - yui和yui3的比较

reactjs - PropType.shape({}) 失败警告 : Invalid Type