簡體   English   中英

我如何解決 mysql 中的拋出問題?

[英]how can i solve a throw issue in mysql?

我想再次發送 (err) => { if (err) throw Error("error: insert client"); },在 function 中調用它但 try catch 不工作,我應該使用 promise? 還是回調? 因為 function 發送郵件是同樣的問題,我認為它更清楚嘗試像第一個示例一樣使用 try catch,但我不確定。 謝謝您的幫助。

const somefunction = ( res, req ) => {
 try 
 {
   registerClient( 2, res.data);
   sendMail( "user@gmail.com", "welcome" );
 } 
 catch( e )
 { res.send( e ) }
}

const registerClient = (id, data) => {

  const time = new Date();

  const query =
    "INSERT INTO clientes( name, lastname, date, fk_user, type ) " +
    "VALUES ( ?, ?, ?, ?, 'client' )";

  connection.query(
    query,
    [data.name, data.lastname, time, id, ],
    (err) => {
      if (err) throw Error("error: insert client");
    }
  );
};

我應該使用 promise 嗎? 還是回調?

是的。

try/catch塊是同步的,因此它無法捕獲異步拋出。

在你的代碼中:

(err) => {
  if (err) throw Error("error: insert client");
}

錯誤“保留”在箭頭 function 內並且不會冒泡,因為它是異步執行的(在數據庫 I/O 之后)。

這里有一個你可以玩的回調例子:

const somefunction = (res, req) => {
  registerClient(2, res.data, (err) => {
    if (err) {
      res.send(e)
    } else {
      sendMail('user@gmail.com', 'welcome') // fire and forget style (?)
      res.send('done')
    }
  })
}

const registerClient = (id, data, cb) => {
  const time = new Date()

  const query =
     'INSERT INTO clientes( name, lastname, date, fk_user, type ) ' +
     "VALUES ( ?, ?, ?, ?, 'client' )"

  connection.query(
    query,
    [data.name, data.lastname, time, id],
    cb
  )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM