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

时间:2020-05-05 04:39:34

标签: javascript node.js callback

从GetAllFarms中获取此MySQL查询结果并放入名为err和farms的变量的正确方法是什么?抱歉,尝试快速编码并使用其他语言。

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
}

我们非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分: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(/* ... */);
})