Javascript non-blocking while loop

Tutorial ini menjelaskan

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
1 loop Nodejs tanpa menganggap Anda memahami konsep promise, looping, dan timer

Ini dibagi menjadi empat bagian. bagaimana JavaScript membaca kode Anda, konsep janji, loop, dan kebutuhan kode asinkron dalam

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2 loop dan implementasi
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs langkah demi langkah

Mari kita mulai

 

Bagian 1. Bagaimana mesin JavaScript membaca kode Anda?

Mesin JavaScript membaca kode Anda dari atas ke bawah. Jika bagian kode membutuhkan waktu lebih lama untuk dieksekusi, bagian kode berikutnya akan menunggu lebih lama untuk dijalankan. Perilaku itu disebut sinkron

Namun, dengan bantuan fungsi callback, timer API, dan promise, Anda dapat membuat kode JavaScript berjalan secara asinkron. Ini sebuah contoh

Asumsikan Anda memiliki dua perhitungan

console.log(2 + 3)
console.log(3 + 5)

Saat Anda menjalankan kode, terminal mencetak 5 diikuti oleh 8. Bagaimana jika Anda ingin melihat 8 sebelum 5?

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
4 API menerima fungsi sebagai input dan menjalankannya setelah jumlah milidetik yang ditentukan. Dalam contoh di atas, kami menjalankan fungsi
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
6 dan
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
7 yang mencetak output 2 + 3 dan 3 + 5 setelah masing-masing 2000 milidetik dan 1000 milidetik

Iklan

Karena JavaScript tidak menunggu perhitungan tertunda di fungsi

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
6, JavaScript akan menjalankan fungsi kedua saat fungsi pertama belum selesai dijalankan

BACA JUGA. Cara menambahkan item ke array di Node. js [SOLVED]

 

Kontrol alur program dengan fungsi callback

Seperti berdiri, kedua fungsi berjalan secara independen satu sama lain. Namun demikian, kita dapat membuat perhitungan pertama bergantung pada perhitungan kedua sehingga Anda tidak akan melihat hasil pertama saat fungsi kedua belum selesai dieksekusi

const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)

Penundaan eksekusi

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
_9 akan mencegah
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
0 dieksekusi karena fungsi pertama tidak dapat dijalankan tanpa parameternya.
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
_1 dan fungsi
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
2

Fungsi yang diterima sebagai parameter ke fungsi lain disebut fungsi

const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
2. Itu hanya menyiratkan, "Lakukan sesuatu dan hubungi saya kembali ketika Anda selesai. "

Kode di atas tidak akan dapat dipertahankan jika kita melakukan perhitungan panjang yang mengarah ke penyatuan beberapa callback. Itu panggilan untuk memahami peran janji di

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop perhitungan Nodejs

 

Seksi 2. Pahami janji sebelum menerapkan async saat mengulang Nodejs

Cara paling umum untuk membuat kode JavaScript sinkron berjalan secara asinkron adalah dengan menggunakan

const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
5 API

Interpretasi paling langsung dari janji dalam JavaScript adalah, "Saya berjanji untuk mengeksekusi kode yang diberikan. Jika janji tersebut diselesaikan, gunakan data yang dikembalikan untuk bagian selanjutnya dari perhitungan Anda. Jika saya gagal memenuhi janji saya, saya akan menolak pesanan dengan pesan kesalahan. "

Objek

const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
_5 mengambil fungsi panggilan balik dengan dua argumen (metode).
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
7 dan
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
8. Fungsi
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
_7 berjalan ketika proses yang diharapkan selesai dengan sukses, sedangkan fungsi
const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
8 menangkap kesalahan yang mungkin terjadi selama eksekusi kode

Iklan

const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}

Anda kemudian dapat menangani output menggunakan

const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
1

computation()
.then( result => console.log(result)) // Print the output on success.
.catch( error => console.log(error)) // otherwise, print the error message.

atau

const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
2

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()

Javascript non-blocking while loop

Sintaks

const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
_3 adalah alternatif untuk menggabungkan beberapa
const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
4s atau
const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
5 dan satu fungsi
const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
6

BACA JUGA. Cara mendapatkan semua file dalam direktori di Node. js [Contoh Praktis]

const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
_3 selalu berjalan dalam suatu fungsi. Fungsi seperti itu dikatakan asinkron, meskipun Anda (sebagai programmer) menulis kode seolah-olah Anda sedang menulis kode sinkron

Anda tidak perlu selalu membuat fungsi

const firstFunction = (firstCalculation, callback) => {
     console.log(firstCalculation)
     callback()
}

const secondCalCulation = () => console.log(3 + 5)
const secondFunction = () => setTimeout(secondCalCulation, 1000)

firstFunction(2 + 3, secondFunction)
5 karena sebagian besar modul Nodejs dan API dibuat untuk berjalan secara asinkron

Mari kita pahami konsep perulangan sebelum mengimplementasikan secara praktis

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs

Iklan

 

Bagian-3. Peran kode asinkron dalam perulangan while

Anda mungkin bertanya-tanya alasan menjalankan kode di

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs. Mungkin ada banyak alasan untuk mencoba mengulang kode asinkron

Salah satu alasan utamanya adalah mengambil banyak sumber daya dalam lingkungan yang terkendali. Akan lebih baik jika Anda membiasakan diri dengan loop sebelum melakukan itu

Loop adalah bagian dari kode yang mengulangi kode tertentu selama kondisinya benar

Tiga loop utama dalam JavaScript adalah

computation()
.then( result => console.log(result)) // Print the output on success.
.catch( error => console.log(error)) // otherwise, print the error message.
1,
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2, dan
computation()
.then( result => console.log(result)) // Print the output on success.
.catch( error => console.log(error)) // otherwise, print the error message.
3 loop.
computation()
.then( result => console.log(result)) // Print the output on success.
.catch( error => console.log(error)) // otherwise, print the error message.
_1 loop terutama digunakan ketika jumlah pengulangan diketahui

for (let i = 1; i < 11; i++) {
     //do something 10 times
}

Di sisi lain,

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
_2 loop terutama digunakan ketika jumlah pengulangan tidak diketahui di awal. Misalnya, Anda mungkin tidak yakin tentang jumlah postingan yang akan diposting saat pengguna mengunjungi aplikasi Anda

// Initially there are no posts to read.
let posts = []

// A method to create posts
const createPost = (post) => {
     posts.push(post)
}

// A method to read posts.
const readPost = () => {
     let counter = 0
     while (counter < posts.length) {
         console.log(posts[counter])
         counter++
     }
}

// create three posts
createPost('Post one')
createPost('Post two')
createPost('Post three')

// Now, we have posts to loop through and read.
readPost()

Javascript non-blocking while loop

Loop

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2 dibagi menjadi initializer, condition, dan increment

  • Penginisialisasi menandai titik awal perulangan. Misalnya, mulailah menghitung di pos pertama
  • Kondisi menentukan kapan harus berhenti mengulang. Misalnya, ulangi blok kode selama jumlah posting kurang dari nilai penghitung
  • Peningkatan/penurunan membawa kita ke putaran perulangan berikutnya. Misalnya, kami menambah dan menetapkan ulang nilai penghitung hingga sama dengan jumlah kiriman

BACA JUGA. Cara membuat ID unik dengan node. js (Nodejs UUID)

Sekarang setelah Anda memahami pemrograman asinkron dan

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2 loop, mari kita lihat bagaimana menggabungkan kedua konsep tersebut

 

Penyiapan lab untuk mempraktikkan Async while loop di Nodejs

Instal Nodejs versi terbaru, lalu buka terminal Anda dan buat dua file

touch file1.js file2.js

Buka file menggunakan editor kode seperti Visual Studio Code

Javascript non-blocking while loop
Javascript non-blocking while loop

Sekarang mari terapkan

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
1 loop Nodejs dengan contoh berikut

Iklan

 

Bagian-4. Contoh Async while loop Nodejs

Contoh 1. Loop penundaan

Asumsikan Anda ingin mencetak 10 ID kiriman setelah milidetik yang ditentukan. Karena eksekusi

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
4 API dijalankan langsung di dalam loop akan ditangguhkan, kita dapat menggunakan rekursi atau
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs sebagai berikut

Buka

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
_1 dan tambahkan kode berikut

const delayExecution = (ms) => {

    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve()
        }, ms)
    })
}

const showIDs = async () => {

    let counter = 1

    while (counter <= 5) {
        await delayExecution(1000)
        console.log(`post id ${counter}`)
        counter++
    }

}

showIDs()

Fungsi

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
_2 mengembalikan janji yang menyelesaikan
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
4 setelah
const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
4 detik yang diterima fungsi setiap kali kita mengulang melalui 1 hingga 5 dalam fungsi asinkron
const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
5

Javascript non-blocking while loop
Javascript non-blocking while loop

Mari kita lihat contoh lain, di mana

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs menangani data API eksternal

 

Contoh-2. Async while loop Nodejs dengan data API eksternal

Asumsikan Anda hanya ingin mengambil 10 judul postingan pertama dari postingan API JSONPlaceholder. Buka

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
_7 dan tulis kode berikut

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
0

Kami mendapatkan data menggunakan fungsi asinkron

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
8 dengan menerapkan Nodejs fetch API (tersedia di Node. js versi 17. 5+)

BACA JUGA. SELESAI. Dapatkan jalur direktori skrip di Node. js [4 Metode]

Kami kemudian mengonversi data (JSON) menjadi objek (array) untuk perulangan yang lebih mudah. Selanjutnya, kami mencetak setiap judul posting bernomor. Terakhir, kita memanggil fungsi

const showOutput = async () => {
     const data = await computation()
     console.log(data)
}
showOutput()
_8 dan melihat hasilnya di keluaran konsol

Javascript non-blocking while loop
Javascript non-blocking while loop

 

Kesimpulan

Pengetahuan tentang

const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
3 while loop Nodejs membantu Anda mengontrol kapan dan bagaimana Anda menerima data. Seperti yang ditunjukkan dalam tutorial ini, akan lebih baik untuk memahami secara mendalam pemrograman asinkron, loop, dan kebutuhan untuk menjalankan kode asinkron di dalam
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2 loop sebelum menggunakan
const computation = () => {

     return new Promise( (resolve, reject) => {

        let doSomething = true
        doSomething ? resolve('Done!') : reject('Failed to execute your request')

     })

}
3 dengan
const firstCalCulation = () => console.log(2 + 3)
const secondCalCulation = () => console.log(3 + 5)

setTimeout(firstCalCulation, 2000)
setTimeout(secondCalCulation, 1000)
2 loop

Apakah while loop memblokir JavaScript?

Loop dapat menjalankan blok kode selama kondisi yang ditentukan benar .

Bagaimana JavaScript non

Tidak Memblokir. Mengacu pada program yang tidak memblokir pelaksanaan operasi lebih lanjut . Metode Non-Blocking dijalankan secara asinkron. Asynchronously berarti bahwa program mungkin tidak perlu mengeksekusi baris demi baris.

Apa yang bukan

NodeJS Event Loop memungkinkan NodeJS untuk melakukan operasi non-pemblokiran dengan memindahkan operasi ke kernel sistem jika memungkinkan . Kebanyakan kernel modern multi-threaded dan mereka dapat melakukan banyak operasi di latar belakang. Ketika salah satu dari operasi ini selesai, kernel memberi tahu NodeJS.

Apa yang memblokir dan non

Pemblokiran mengacu pada operasi yang memblokir eksekusi lebih lanjut hingga operasi tersebut selesai sedangkan non-pemblokiran mengacu pada kode yang tidak memblokir eksekusi . Atau sebagai Node. js docs mengatakannya, pemblokiran adalah saat eksekusi JavaScript tambahan di Node. js harus menunggu hingga operasi non-JavaScript selesai.