我已經嘗試解決這個問題兩天了,基本上已經瀏覽了我在 stackoverflow 上能找到的所有內容,也許我錯過了一些東西,因為我已經盯著它看了這麼久了。
我有一個nodejs文件,它透過sql載入使用者資料並將結果傳送到主文件(伺服器)。
我使用非同步函數再次呼叫此函數以取得該行的值。
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)
來自sql查詢的資料是正確的,當我在控制台中輸出它們時,它們也返回正確的結果,但是它們沒有通過返回傳遞給我調用代碼的函數,它只是未定義的,我有在這裡等待的感覺不知何故沒有等待結果,我在這裡錯過了什麼?我已經用網上能找到的幾個星座進行了嘗試,不幸的是我還沒有達到目標。
我已經嘗試不使用 async/await 來寫 sql 查詢,而只使用 async/await 寫呼叫函數,但沒有結果。我嘗試過使用和不使用 sql 回調的各種 sql 查詢。我希望有人能指出我在這裡扭曲或遺漏的內容。
P粉1949190822024-03-28 09:02:08
您執行查詢的方法不正確,您應該這樣做
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") } } }
嘗試一下,你不能像你所做的那樣混合回調和等待,只是等待結果,如果出現錯誤,在這種情況下將由 catch 區塊處理
P粉3863180862024-03-28 00:09:40
在好的情況下,您的非同步回呼函數只會將其傳回 response
變數中。但無論如何,在巢狀非同步函數中使用 return wait 並不是最好的方法。因此,您的結果
將成為回應
變量,您沒有對它執行任何操作,它只會保持原樣,沒有傳回值。因此,您將得到一個普通函數,並且由於其執行結果是 undefined
。因為你沒有從那裡返回任何東西。
我建議:
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 };