Saya cuba memikirkan cara yang betul untuk menghantar data tersuai kepada panggilan pertanyaan supaya ia tersedia dalam panggilan balik. Saya menggunakan perpustakaan MySQL (semua versi terkini) dalam nodejs.
Saya mempunyai sambungan panggilan.query(sql, function(err, result) {...});
Saya tidak dapat mencari jalan untuk 1) menghantar data/parameter tersuai kepada panggilan supaya ia tersedia apabila panggilan balik dipanggil. Jadi, apakah perkara yang betul untuk dilakukan?
Saya mempunyai pseudokod berikut:
... untuk (ix dalam SomeJSONArray) { sql = "PILIH (1) DARI someTable WHERE someColumn = " + SomeJSONArray[ix].id; connection.query(sql, function (err, result) { ... var y = SomeJSONArray[ix].id; }; }
Daripada kod di atas, saya perlu dapat menghantar nilai semasa "ix" yang digunakan dalam pertanyaan kepada panggilan balik itu sendiri.
Bagaimana saya boleh melakukannya?
Untuk menjawab soalan awal dan memberi contoh, bungkus fungsi panggil balik dalam fungsi tanpa nama yang serta-merta mencipta skop "gambar" yang mengandungi data masuk.
Bagi mereka seperti saya yang baru belajar konsep ini, yang terakhir })(ix)); ialah nilai var luar ix=1 yang dihantar ke (fungsi(ix){. Jika anda konsol. log("ix ="+abc); ditukar kepada console.log("ix="+abc);, kemudian ia boleh dinamakan semula kepada (function(abc){.
fwiw (Terima kasih kepada Chris atas pautan itu, mengisi kekosongan untuk mendapatkan penyelesaian)
Jika anda menggunakan node-mysql, sila ikut arahan dalam dokumentasi:
Kod untuk melepaskan rentetan dengan betul juga disediakan dalam dokumentasi, tetapi menggunakan tatasusunan dalam panggilan pertanyaan akan melepaskannya secara automatik untuk anda.
https://github.com/felixge/node-mysql