首页 > 解决方案 > 从另一个函数节点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
                        }
                    }
                )
          }
                
        
       }
    });    
  }

标签: node.js

解决方案


您可以将您的函数转换为 Promise,然后使用 async/await 它在使用异步调用函数方面将更具可读性

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

推荐阅读