从Node.js函数回调中获取MySQL结果的正确方法?

问题描述 投票:0回答:1

从GetAllFarms中获取这个MySQL查询的结果,并将其放入一个名为err和farm的变量中,正确的方法是什么?对不起,做了一个快速的代码尝试,而且来自不同的语言。

var err, farms = GetAllFarms()
console.log("GetAllFarms:")
console.log(farms)
console.log(err)


function GetAllFarms(callback) {
    query = db.query("SELECT * FROM farms ", function (err, result) {
        console.log("DEBUG:QUERY//");
        console.log(query.sql);
        // console.log(result)

        if (err) {
            // console.log(err)
            return callback(err, null)
        } else {
            // console.log(result)
            return callback(null, result)
        }
    });

    // db.end()

    console.log("query")
    console.log(query.result)

    return query
}

任何帮助都是非常感激的。谢谢你的帮助。

javascript node.js callback
1个回答
2
投票

你必须决定你是想通过回调提供结果还是通过返回提供结果。不要把它们混在一起,这很容易混淆。

回调方式

var err, farms = GetAllFarms()
console.log("GetAllFarms:")
console.log(farms)
console.log(err)


function GetAllFarms(callback) {
    query = db.query("SELECT * FROM farms ", function (err, result) {
        console.log("DEBUG:QUERY//");
        console.log(query.sql);
        // console.log(result)

        if (err) {
            // console.log(err)
            return callback(err, null)
        } else {
            // console.log(result)
            return callback(null, result)
        }
    });

    // db.end()

    console.log("query")
    console.log(query.result)
}

// usage
GetAllFarms((error, result) => {
    if (error) {
      // handle error
    }
    // process result
})

承诺办法

var err, farms = GetAllFarms()
console.log("GetAllFarms:")
console.log(farms)
console.log(err)


function GetAllFarms() {
    return new Promise((resolve, rejct) => {
    db.query("SELECT * FROM farms ", function (err, result) {
          console.log("DEBUG:QUERY//");
          console.log(query.sql);

          if (err) {
              return reject(err)
          } else {
              return resolve(result)
          }
      });
  });
}

// usage
(async () => {
  const res = await GetAllFarms();
  // or 
  GetAllFarms().then(/* ... */).catch(/* ... */);
})
© www.soinside.com 2019 - 2024. All rights reserved.