gpt4 book ai didi

javascript - 使用 setTimeout 暂停 REST API 调用

转载 作者:行者123 更新时间:2023-12-01 02:47:46 25 4
gpt4 key购买 nike

我有一个 ID 数组和一个需要调用的修复端点。所以我想 foreach ID 数组并为每个 ID 进行相应的 REST API 调用。由于我不想“淹没”端点,因此我想在每次调用之间等待一秒钟。另外,我想在使用新 ID 调用端点之前等待响应。

这是我想到的:

// Code goes here
console.clear();

const url = 'some-domain.com/v1/api/users';
const ids = [1, 2, 3, 4, 5, 6, 7];
const serviceMock = (id) => new Promise((resolve, reject) => {

console.log('Got request for id ' + id);
setTimeout(() => {

resolve(`${url}${id} returned ${ Math.floor((Math.random() * 100) + 1)}`);
}, 2000);
});

const main = async() => {

let index = 0;
for (let id of ids) {

index++;
setTimeout(async() => {

const data = await serviceMock(id);
console.log(`Done for user ${id}!`);
console.log(data);
}, 1000 * index);
}
};

main();

serviceMock中的setTimeout用于模拟其余API调用,main中的setTimeout用于在调用之间暂停。

现在,我希望它的行为如下(在控制台中):

Got request for id 1
Done for user 1!
some-domain.com/v1/api/users1 returned 77
Got request for id 2
Done for user 2!
some-domain.com/v1/api/users2 returned 75
Got request for id 3
Done for user 3!
some-domain.com/v1/api/users3 returned 26
Got request for id 4
Done for user 4!
some-domain.com/v1/api/users4 returned 44
Got request for id 5
Done for user 5!
some-domain.com/v1/api/users5 returned 79
Got request for id 6
Done for user 6!
some-domain.com/v1/api/users6 returned 52
Got request for id 7
Done for user 7!
some-domain.com/v1/api/users7 returned 34

这就是我得到的:

Got request for id 1
Got request for id 2
Got request for id 3
Done for user 1!
some-domain.com/v1/api/users1 returned 77
Got request for id 4
Done for user 2!
some-domain.com/v1/api/users2 returned 75
Got request for id 5
Done for user 3!
some-domain.com/v1/api/users3 returned 26
Got request for id 6
Done for user 4!
some-domain.com/v1/api/users4 returned 44
Got request for id 7
Done for user 5!
some-domain.com/v1/api/users5 returned 79
Done for user 6!
some-domain.com/v1/api/users6 returned 52
Done for user 7!
some-domain.com/v1/api/users7 returned 34

这是一个工作示例:http://plnkr.co/edit/sNfk8GIfqbhrpql5hQ16?p=preview

我到底错过了什么?

最佳答案

不要在 setTimeout 中添加“await”。

我建议你编写wait函数:

const wait = ms => new Promise(
(resolve, reject) => setTimeout(resolve, ms)
);

现在您可以轻松键入:

const main = async () => {

let index = 0;
for (let id of ids) {
index++;

await wait(1000);

const data = await serviceMock(id);
console.log(`Done for user ${id}!`);
console.log(data);
}

};

main();

关于javascript - 使用 setTimeout 暂停 REST API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47158639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com