如何将查询的结果对象存储到nodejs中的对象变量中

时间:2018-03-04 22:12:45

标签: javascript node.js express

我正在使用此查询从products表中选择所有记录,并且我想将它们存储在一个对象变量中,以后我可以将它用于其他目的,所以我尝试了这个

 var SelectQuery = "Select * FROM `products`";
 var ProductDetails = {};
 conn.query(SelectQuery, function (err, result) {
     if(err) {
        console.log(err);
      } else {
        ProductDetails = result;
      }
 });

 console.log(ProductDetails);

但是在控制台中我得到了{}

1 个答案:

答案 0 :(得分:0)

(感谢用户jfriend00指出我原来回答中的一个主要疏忽)

如果 conn.query返回promise ,那么您可以使用async/await以您描述的方式开展此工作:

async function getProducts() {
     var SelectQuery = "Select * FROM `products`";
     var ProductDetails = {};
     await conn.query(SelectQuery, function(err, result) {
         if (err) {
             console.log(err);
         } else {
             ProductDetails = result;
         }
     });    

    console.log(ProductDetails);
}

但请注意,此仅在您的conn.query返回承诺时有效。此外,它是较新的ES功能,因此您可能需要根据您的节点版本进行转换。另请注意,此处发生的功能需要包含async

否则,用于处理异步性的其他候选人是callback functionsPromises

如果conn.query 返回承诺,您可以编写自己的查询实现来返回承诺,以便您可以利用async / await

function asyncQuery(sqlQuery) {
    return new Promise((resolve, reject) => {
        conn.query(SelectQuery, function(err, result) {
             if (err) {
                 reject(err);
             } else {
                 resolve(result);
             }
         })
    })
}

然后原始函数可以重写为:

async function getProducts() {
    var SelectQuery = "Select * FROM `products`";
    var ProductDetails = await asyncQuery(SelectQuery);
    console.log(ProductDetails);
}