我应该从哪里调用module.exports来获取非空值?

时间:2018-05-15 16:11:03

标签: javascript asynchronous es6-promise

我应该在哪里呼叫module.export,我认为,它应该是一个回调函数。

但我对于应该在哪里调用回调函数感到困惑。

我仍然对解决方案感到困惑,对我来说太复杂了。

sql.connect(config, function(err) {

  if (err)
    console.log(err);

  // create Request object
  var request = new sql.Request();

  // query to the database and get the records
  request.query('select part_num,qty from CRM.CRM.Fishbowl_Inventory where not location = \'Shipping\'',

    function(err, recordset) {

      if (err)
        console.log(err)

      // send records as a response
      var details = recordset;
    });
});

module.exports = details;

混乱:

非常抱歉打扰你们,但我想确保通过Javascript涉及任何数据库请求,对我们的数据库没有任何损害。

  

我直接使用我们的生产数据库进行测试,因此要谨慎

因此Max在他的回答中提供了以下代码

const connectToSql = require('./connectToSql');

connectToSql()
    .then(details => {
        console.log(details);

    //Here I can do as much logic as I want 
    //And it won't affect my database or call multiple requests on my DB 


    })
    .catch(err => {
        console.log(err);
    });

我能理解我提出的超级愚蠢的问题,非常抱歉。

1 个答案:

答案 0 :(得分:2)

您无法导出功能结果。您想导出一个将返回您的值的函数。像这样:

function connectToSql(config) {
  return new Promise((resolve, reject) => {
    sql.connect(config, function (err) {

      if (err) {
        console.log(err);
        reject(err);
      }

      // create Request object
      var request = new sql.Request();

      // query to the database and get the records
      request.query('select part_num,qty from CRM.CRM.Fishbowl_Inventory where not location = \'Shipping\'',

        function (requestErr, recordset) {

          if (err) {
            console.log(requestErr);
            reject(requestErr);
          }

          resolve(recordset);
        });
    });
  });
}

module.exports = connectToSql;

因为你的函数是异步的,所以我返回了一个将返回结果的promise。此外,查询中的第二个错误的名称与连接中的第一个错误的名称相同。这会引起问题。

如何使用它的示例:

const connectToSql = require('./connectToSql');

connectToSql()
    .then(details => {
        console.log(details);
    })
    .catch(err => {
        console.log(err);
    });