Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Melaksanakan Janji Secara Berurutan dalam JavaScript ES6 For Loop?

Bagaimanakah Saya Boleh Melaksanakan Janji Secara Berurutan dalam JavaScript ES6 For Loop?

Patricia Arquette
Lepaskan: 2024-12-03 17:11:10
asal
867 orang telah melayarinya

How Can I Sequentially Execute Promises in a JavaScript ES6 For Loop?

JavaScript ES6 Promise for Loop

Dalam pengaturcaraan, tugas biasa adalah untuk melelakan melalui koleksi dan melaksanakan operasi tak segerak pada setiap elemen. Dalam JavaScript ES6, janji menawarkan cara yang berkuasa untuk mencapai ini. Walau bagaimanapun, memastikan bahawa setiap janji dilaksanakan hanya selepas janji sebelumnya boleh mencabar.

Dalam coretan kod yang disediakan, gelung for mencipta semua janji secara serentak, menghasilkan output rawak. Matlamat kami adalah untuk menjadikan setiap janji dijalankan secara berurutan (.then()).

Menjanjikan setTimeout

Untuk menambah baik kod kami, mari buat versi setTimeout yang dijanjikan:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
Salin selepas log masuk

Fungsi ini mengembalikan janji yang diselesaikan apabila pemasa tamat tempoh, membolehkan kami merantai dengan mudah janji.

Merantai Janji

Dengan setTimeout yang dijanjikan, beberapa kaedah wujud untuk melaksanakan rantaian yang diingini:

1. Dengan untuk

Menggunakan gelung for, buat janji penyelesaian segera dan jalinkan janji baharu seperti yang diselesaikan sebelum ini:

for (let i = 0, p = Promise.resolve(); i < 10; i++) {
    p = p.then(() => delay(Math.random() * 1000))
         .then(() => console.log(i));
}
Salin selepas log masuk

2. Dengan Array.reduce

Pilihan lain ialah menggunakan Array.reduce:

[...Array(10)].reduce((p, _, i) => p.then(() => delay(Math.random() * 1000))
                               .then(() => console.log(i)), Promise.resolve());
Salin selepas log masuk

3. Dengan Fungsi Rekursif

Fungsi rekursif juga boleh digunakan:

const loopPromise = (i, p) => {
    if (i >= 10) {
        return;
    }
    p.then(() => delay(Math.random() * 1000))
     .then(() => console.log(i))
     .then(() => loopPromise(i + 1, p));
};

loopPromise(0, Promise.resolve());
Salin selepas log masuk

4. Dengan Async / Await

Sintaks ini tersedia dalam ECMAScript 2017:

async function asyncLoop() {
    for (let i = 0; i < 10; i++) {
        await delay(Math.random() * 1000);
        console.log(i);
    }
}

asyncLoop();
Salin selepas log masuk

5. Dengan menunggu...dari

Diperkenalkan dalam ECMAScript 2020, sintaks ini memudahkan lagi gelung:

for await (let i of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
    await delay(Math.random() * 1000);
    console.log(i);
}
Salin selepas log masuk

Dengan memanfaatkan kaedah ini, kami boleh merangkai janji dengan berkesan dalam gelung for, memastikan bahawa setiap janji hanya dilaksanakan selepas janji sebelumnya diselesaikan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Janji Secara Berurutan dalam JavaScript ES6 For Loop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan