从另一个函数节点js获取函数调用的返回值

时间:2020-08-24 10:39:59

标签: node.js

我有一个名为uploadData的函数,其中我正在调用getClientId来获取clientid。在getclientId函数内部,我可以获得返回值。但是我无法在uploadData函数中访问该返回值。在控制台中,我变得不确定。

  uploadData(con, data, callback) {       
    var total = parseFloat(data.pricelist) + parseFloat(data.print)
    var ac = parseFloat(total)*parseFloat(data.quantity)
    var sold = parseFloat(data.soldprice)*parseFloat(data.quantity)
    var rd = parseFloat(data.sold) - parseFloat(total)
    var rt = parseFloat(rd) * parseFloat(data.quantity)
    var client =data.client.toLowerCase()
    var clientId = this.getClientId(con, data,callback)
    console.log(clientId)
}


getClientId(con, data,callback) { 
    var client =data.client.toLowerCase()
        con.query(`SELECT *  from client where lower(name) = '${client}'`, function(err, rows) {
        if(err) {
          return err

        }
        else{ 
          if(rows.length>0){
             return rows[0].id
          }
          else{
                con.query(
                  `INSERT INTO client SET 
                    name = '${data.client}', 
                    created_by = '${data.user_id}'`,
                    function(er, row) {
                      if(er){
                        return er
                      }
                        else{
                          return row.insertId
                        }
                    }
                )
          }
                
        
       }
    });    
  }

1 个答案:

答案 0 :(得分:1)

您可以将函数转换为Promise,然后使用异步/等待,就使用异步调用函数而言,它将更具可读性

getClientId(con, data,callback) { 
return new Promise((resolve,reject)=>{
   var client =data.client.toLowerCase()
   con.query(`SELECT *  from client where lower(name) = '${client}'`, function(err, rows) {
   if(err) {
     reject(err)
   }
   else{ 
     if(rows.length>0){
        resolve(rows[0].id)
     }
     else{
           con.query(
             `INSERT INTO client SET 
               name = '${data.client}', 
               created_by = '${data.user_id}'`,
               function(er, row) {
                 if(er){
                   reject(er)
                 }
                   else{
                     resolve(row.insertId)
                   }
               }
           )
     }
  }
 });    
 }
)
}

,然后将此功能用作

const clientId = await this.getClientId(con, data,callback);