Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数中的延迟循环_Javascript_Axios - Fatal编程技术网

javascript函数中的延迟循环

javascript函数中的延迟循环,javascript,axios,Javascript,Axios,我有多个API调用,用于删除自动测试的用户数据 首先我得到一个访问令牌 async function getAccessToken(email, pwd) { try { const form = {email: email, password: pwd}; let config = { headers: { 'Content-Type': 'application/x-www-form-ur

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

首先我得到一个访问令牌

    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;
    }
}
然后,我使用该令牌删除所需的数据

 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`);
}
vari;
对于(i=1;i<1001;i++){
//控制台日志(i);
TMDeleteAllGoals(`loadtest${i}@test.com`);
}
我遇到的问题是,这里似乎有一个最大并发调用,以获取我的访问令牌(不确定限制是什么)。所以,如果我用太多的用户点击它,它将开始返回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`);
    }
}
consttimeout=ms=>newpromise(res=>setTimeout(res,ms));
异步函数deletetethegoals(){
对于(变量i=1;i<1001;i++){
//控制台日志(i);
等待超时(500);
const deleteGoals=wait deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
}
}

您的服务器中可能有max request配置,因此即使超时,也不能保证请求将在500毫秒之前结束。 为什么不一个接一个地送呢

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

您的服务器中可能有max request配置,因此即使超时,也不能保证请求将在500毫秒之前结束。 为什么不一个接一个地送呢

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

当被接受的答案时,你可以投上一票。当被接受的答案时,你可以投上一票