Hampir semua tempat di simpul di mana fungsi panggilan balik digunakan tidak sinkron. Kode di balik fungsi callback kemungkinan akan dieksekusi terlebih dahulu daripada kode dalam fungsi callback, terutama operasi basis data. Tentu saja, Node juga menyediakan fungsi untuk versi sinkron, seperti operasi file. fs.readfilesync () adalah versi sinkron dari fs.readfile ().
Jadi pertanyaannya adalah, apakah foreach () asinkron? Secara logis, jika sinkronisasi tidak ditambahkan, itu harus asinkron.
Salinan kode adalah sebagai berikut:
var arr = ['a', 'b', 'c'];
var str = '123';
arr.foreach (function (item) {
str += item;
while (true) {}; // Gunakan loop dead untuk menempel ~~
});
Console.log (str);
Jalankan kode di atas dan akhirnya macet, tanpa output apa pun. .
Jadi, foreach () dalam simpul disinkronkan! Lai
Ketika saya pertama kali menggunakan Node, saya tidak mempertimbangkan masalah ini, jadi saya menulisnya secara sinkron. Tiba -tiba saya berpikir bahwa setelah tes, saya terkejut dan berpikir bahwa kode sebelumnya telah ditulis secara tidak benar.
Jika dalam beberapa kasus, foreach perlu diproses secara tidak sinkron, google itu dan ada node-array, Anda dapat mencobanya ~~ portal: https://github.com/cfsghost/node-array
Karya ini dibuat oleh http://www.cnblogs.com/imyzf