Di bagian ini, mari kita pelajari tentang metode nodej untuk mengimplementasikan operasi yang tidak memblokir.
Pertama mari kita ubah penangan mulai:
Salinan kode adalah sebagai berikut:
var exec = membutuhkan ("child_process"). exec;
fungsi start () {
console.log ("permintaan pawang 'start' dipanggil.");
var konten = "kosong";
exec ("ls -lah", function (error, stdout, stderr) {
konten = stdout;
});
mengembalikan konten;
}
function unggah () {
console.log ("unggahan unggahan 'pawang' dipanggil.");
mengembalikan "Hello unggah";
}
Exports.start = Mulai;
Exports.upload = unggah;
Kode ini membuat konten variabel baru (nilai awal adalah "kosong"), mengeksekusi perintah "LS -LAH", memberikan hasilnya ke konten, dan akhirnya mengembalikan konten.
Kami telah memperkenalkan modul Node.js baru, Child_process, yang digunakan untuk mengimplementasikan operasi non-blocking yang sederhana dan praktis: exec ().
Jadi apa yang dilakukan Exec ()?
Itu mengeksekusi perintah shell dari node.js. Dalam contoh di atas, kami menggunakannya untuk mendapatkan semua file di direktori saat ini ("ls -lah"), dan kemudian mengeluarkan informasi file ke browser ketika /starturl meminta.
Kami memulai server dan mengunjungi "http: // localhost: 8888/start" dan kami akan menemukan bahwa output konten pada halaman kosong.
Exec () berfungsi, dan dengan itu kami dapat melakukan operasi shell yang sangat memakan waktu tanpa memaksa aplikasi kami untuk berhenti dan menunggu operasi itu.
Meskipun demikian, output konten halaman tampaknya bukan hasil yang kami inginkan.
Mari kita menganalisis alasannya:
Kode kami dieksekusi secara sinkron, yang berarti bahwa setelah memanggil exec (), Node.js akan segera menjalankan konten pengembalian;
Pada saat ini, konten masih "kosong", karena fungsi panggilan balik yang diteruskan ke exec () belum dieksekusi - karena pengoperasian exec () tidak sinkron.
Di bagian selanjutnya kami akan menjelaskan cara menyelesaikan masalah ini.