私はIDの配列と呼び出す必要がある修正エンドポイントを持っています。だから私は、IDの配列をforeachし、各IDの対応する休息APIコールを作成したい。エンドポイントを「フラッド」させたくないので、私は各コールの間に1秒間待たなければなりません。また、新しいIDでエンドポイントを呼び出す前に応答を待っています。setTimeoutを使用して休止APIコールを一時停止する
は、ここで私が思い付いたものです:serviceMockでsetTimeout
は、残りのAPIコールをシミュレートするために使用され、そしてmain
でsetTimeout
は、呼び出しの間に一時停止するために使用される
// 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();
。次のように
さて、私はそれが動作するように希望の方法は、(コンソールで)です:
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'コールバックを待つことはありません。実際には、コールバックを待つことはできません。約束を待つことができます。ちょうど 'serviceMock'でデモンストレーションしたのとまったく同じように、遅延のためのものを作成してください。 – Bergi
うーん、これのようなもの? http://plnkr.co/edit/7n6ysTt0tn9UdlUV7ppp 'setTimeout':' 1000 * index'でこれを行う必要がありますか? – uglycode
はい、そのようなものですが、a) 'serviceMock(id)'をコールバックの中ではなく、遅延の後の 'await'に入れます。b)遅延プロミスのヘルパー関数を作成します。それ以上の倍数化 – Bergi