de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Tristan Dubé
Tristan Dubé
Question

Perulangan Node.js for() mengembalikan nilai yang sama pada setiap perulangan

Saya membuat aplikasi yang sangat sederhana ini untuk membantu saya menjelajahi nodejs dan saya memiliki handler tertentu yang menghasilkan kode HTML berdasarkan 10 pesan teratas di database saya. Cuplikan yang saya alami masalah dengan loop melalui pesan dan memanggil fungsi yang menghasilkan HTML dan menambahkan hasilnya ke string html saya.

function CreateMessageboard(BoardMessages){
  var htmlMessageboardString = "";

  [... Console debug code ...]

  for(var i = 0; i < BoardMessages.length;i++){
        (function(){
            var j = i;
            console.log("Loading message %d".green, j);
            htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
          })();
  }
}

Saya pikir masalah saya adalah karena cara Javascript'menangani loop, terkait dengan penutupan dari apa yang saya baca dan inilah yang saya coba gunakan di atas atau cara async nodejs menangani fungsi saya. Saat ini 10 hasil dikembalikan dengan baik dari db tetapi pesan terakhir diproses di setiap loop.

Saya juga mencoba, alih-alih melakukan var j = i, untuk mengambil nilai i sebagai parameter fungsi dan meneruskannya ke dalam penutupan dan hasilnya tetap sama.

Saya merasa saya kehilangan pengetahuan penting untuk menyelesaikan masalah saya, bisakah saya mendapatkan pencerahan tentang masalah ini?

Edit: Saya dipersilakan untuk memberikan info lain tentang kode, saya akan memposting seluruh repo git tetapi orang-orang mungkin tidak ingin berenang melalui seluruh proyek untuk membantu saya men-debug masalah ini, jadi saya memposting seluruh fungsi di komentar untuk memberikan lebih banyak konteks.

13 2012-04-19T18:56:23+00:00 2
Tristan Dub&#233;
Tristan Dubé
Pertanyaan edit 24 Januari 2014 в 4:01
Pemrograman
javascript
loops
node.js
Solution / Answer
 Joe
Joe
19 April 2012 в 7:45
2012-04-19T19:45:40+00:00
Lebih
Sumber
Sunting
#15984750
  for(var i = 0; i < BoardMessages.length;i++){
        (function(j){
            console.log("Loading message %d".green, j);
            htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
        })(i);
  }

Itu seharusnya berfungsi; namun, Anda tidak boleh membuat fungsi dalam sebuah loop. Oleh karena itu,

  for(var i = 0; i < BoardMessages.length;i++){
        composeMessage(BoardMessages[i]);
  }

  function composeMessage(message){
      console.log("Loading message %d".green, message);
      htmlMessageboardString += MessageToHTMLString(message);
  }
25
0
 ming_codes
ming_codes
19 April 2012 в 7:36
2012-04-19T19:36:31+00:00
Lebih
Sumber
Sunting
#15984749

Saya akan menyarankan untuk melakukan ini dalam gaya yang lebih fungsional :P

function CreateMessageboard(BoardMessages) {
  var htmlMessageboardString = BoardMessages
   .map(function(BoardMessage) {
     return MessageToHTMLString(BoardMessage);
   })
   .join('');
}

Coba ini

3
0
Related communities 2
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Node.js Indonesia 🇮🇩
Node.js Indonesia 🇮🇩
10 785 pengguna
Indonesian NodeJs Developer Community Admin : - @khannedy - @endymuhardin Ninja JS: @julianalimin @kucingMumuBulatMeongMeongNyanCat
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Галина Утяшова
Terdaftar 20 jam yang lalu
2
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
3
Akshit Mehta
Terdaftar 6 hari yang lalu
4
me you
Terdaftar 1 minggu yang lalu
5
Никита иванов
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi