Rumah > Soal Jawab > teks badan
Saya telah cuba menyelesaikan masalah ini selama dua hari sekarang dan telah meneliti pada dasarnya semua yang saya dapati di stackoverflow, mungkin saya kehilangan sesuatu kerana saya telah merenungnya sekian lama.
Saya mempunyai fail nodejs yang memuatkan data pengguna melalui sql dan menghantar hasilnya ke fail utama (pelayan).
Saya memanggil fungsi ini sekali lagi menggunakan fungsi async untuk mendapatkan nilai baris.
var sql = require('./db'); let h = /^[a-zA-Z-_.\d ]{2,180}$/; async function getdata(hash){ if (!hash || !hash.match(h)) { return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin: false} }else{ const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash], async function(err, result, fields){ //console.log(result) return await result }) } } module.exports = { getdata };
async function getvalue(h){ try{ var result = await admin.getdata(h); console.log('1'+result); if(result{ console.log('2'+result) } }catch(err){ console.log(err); console.log('Could not process request due to an error'); return; } } getvalue(user.ident)
Data dari pertanyaan sql adalah betul dan apabila saya mengeluarkannya dalam konsol, mereka juga mengembalikan hasil yang betul tetapi ia tidak dihantar kembali ke fungsi yang saya gunakan untuk memanggil kod itu, ia hanya tidak ditentukan dan saya perlu menunggu di sini Perasaan entah bagaimana tidak menunggu keputusan, apa yang saya hilang di sini? Saya telah mencubanya dengan beberapa tanda zodiak yang boleh saya temui dalam talian, dan malangnya saya belum sampai ke sana lagi.
Saya telah cuba menulis pertanyaan sql tanpa menggunakan async/menunggu dan hanya menulis fungsi panggilan menggunakan async/menunggu tetapi tanpa hasil. Saya telah mencuba pelbagai pertanyaan sql dengan dan tanpa panggilan balik sql. Saya berharap seseorang boleh menunjukkan sesuatu yang saya putar belit atau terlepas di sini.
P粉1949190822024-03-28 09:02:08
Cara anda melaksanakan pertanyaan adalah tidak betul, anda harus melakukan ini
async function getdata(hash){ if (!hash || !hash.match(h)) { return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin: false} }else{ try{ const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash]) return response } catch(error){ throw Error(error.message + "error") } } }
Cubalah, anda tidak boleh mencampurkan panggilan balik dan menunggu seperti yang anda lakukan, cuma tunggu hasilnya, jika ralat berlaku, dalam kes ini ia akan dikendalikan oleh blok tangkapan
P粉3863180862024-03-28 00:09:40
Dalam keadaan yang baik, fungsi panggil balik async anda hanya akan mengembalikannya kepada response
变量中。但无论如何,在嵌套异步函数中使用 return wait 并不是最好的方法。因此,您的结果
将成为响应
变量,您没有对它执行任何操作,它只会保持原样,没有返回值。因此,您将得到一个普通函数,并且由于其执行结果是 undefined
. Kerana anda tidak memulangkan apa-apa dari sana.
Saya syorkan:
const sql = require('./db'); const h = /^[a-zA-Z-_.\d ]{2,180}$/; async function getdata(hash){ if (!hash || !hash.match(h)) { return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin: false} }else{ try { const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash]); return response; } catch (err) { throw new Error('Cold not proceed with query'); // Wwhatever message you want here } } } module.exports = { getdata };