Saya telah melakukan Javascript berbasis web (vanilla JS, jQuery, Backbone, dll) selama beberapa tahun sekarang, dan baru-baru ini saya telah melakukan beberapa pekerjaan dengan Node.js. Butuh beberapa saat untuk memahami pemrograman "non-blocking", tetapi sekarang saya sudah terbiasa menggunakan callback untuk operasi IO dan yang lainnya.
Saya mengerti bahwa Javascript bersifat single-threaded. Saya mengerti konsep Node "event queue". Apa yang saya TIDAK mengerti adalah apa yang menentukan apakah operasi javascript individu adalah "memblokir" vs "non-memblokir". Bagaimana saya tahu operasi mana yang bisa saya andalkan untuk menghasilkan output secara sinkron untuk saya gunakan dalam kode nanti, dan yang mana saya harus meneruskan panggilan balik agar saya dapat memproses output setelah operasi awal selesai? Apakah ada daftar fungsi Javascript di suatu tempat yang asinkron / non-pemblokiran, dan daftar yang fungsi sinkronisasi / pemblokiran? Apa yang mencegah aplikasi Javascript saya menjadi satu kondisi ras raksasa?
Saya tahu bahwa operasi yang membutuhkan waktu lama, seperti operasi IO dalam operasi Node dan AJAX di web, mengharuskan mereka untuk tidak sinkron dan karenanya menggunakan panggilan balik - tetapi siapa yang menentukan apa yang memenuhi syarat sebagai "waktu yang lama"? Apakah ada semacam pemicu dalam operasi ini yang menghilangkannya dari "antrian acara" yang normal? Jika tidak, apa yang membuatnya berbeda dari operasi sederhana seperti memberikan nilai ke variabel atau mengulang melalui array, yang tampaknya dapat kita andalkan untuk diselesaikan secara sinkron?
Mungkin saya bahkan tidak memikirkan hal ini dengan benar - berharap seseorang dapat meluruskan saya. Terima kasih!