使用函数从诺言返回数据

时间:2019-02-14 02:50:54

标签: javascript node.js sql-server promise es6-promise

我在javascript中创建了从数据库中获取数据的函数 我返回了结果,但没有给我预期的结果

功能

const getData = id => {
  return new sql.ConnectionPool(config).connect().then(pool => {
    return pool
      .request()
      .query(`select City,Address,Price from Temp where tempId='${id}'`)
      .then(result => {
        sql.close();
        return result;
      })
      .catch(e => {
        sql.close();
      });
  });
};

输出

Promise {
    _bitField: 0,
    _fulfillmentHandler0: undefined,
    _rejectionHandler0: undefined,
    _promise0: undefined,
    _receiver0: undefined 
} 

预期产量

  

城市,地址,价格

2 个答案:

答案 0 :(得分:1)

由于您正在使用 promise ,因此返回结果的方法是使用then对其进行解析。您也可以使用catch处理错误。就您而言,它看起来像这样

// Your function that returns a promise
const getData = id => {
  return new sql.ConnectionPool(config).connect().then(pool => {
    return pool
      .request()
      .query(`select City,Address,Price from Temp where tempId='${id}'`)
      .then(result => {
        sql.close();
        return result;
      })
      .catch(e => {
        sql.close();
      });
  });
};

// How you actually get the result
getData('yourIdGoesHere')
    .then(data => {
        // Your data is here
        console.log(data);
    }).catch(err => console.error(err));

答案 1 :(得分:-1)

您可以使用异步,等待以简化承诺。

const getData = async (id) => {
    try {
        const pool = await new sql.ConnectionPool(config).connect();
        const result = pool
                        .request()
                        .query(`select City,Address,Price from Temp where tempId='${id}'`)
        sql.close();
        return result;
    } catch (exception) {
        sql.close();
        return;
    }

};