搜尋

首頁  >  問答  >  主體

Node.js 中的 mysql 非同步/等待僅傳回未定義

我已經嘗試解決這個問題兩天了,基本上已經瀏覽了我在 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粉821274260P粉821274260244 天前414

全部回覆(2)我來回復

  • P粉194919082

    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 區塊處理

    回覆
    0
  • P粉386318086

    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 };

    回覆
    0
  • 取消回覆