【问题标题】:Using promises for db and server对数据库和服务器使用 Promise
【发布时间】:2018-03-25 02:27:13
【问题描述】:

我还在学习 js,但我正在尝试用 nodejs 编写一个基本的服务器。 服务器应该接受查询,然后从数据库返回 JSON。

我正在尝试使用 Promise,但可以解决这个问题。 我的服务器返回一个空回复。 那我做错了什么?

到目前为止我的服务器文件(简化):

http.createServer(function (request, response) {
  if (request.method === "GET") {
    ...
    var dbRes = dbFunc.getFromDB(query);
    response.statusCode = 200;
    response.setHeader('Content-Type', 'application/json');
    response.end(JSON.stringify(dbRes));
  }
}).listen(port);

到目前为止我的数据库文件(简化):

exports.readHandeler = function (query) {

  var promise = new Promise(function(resolve, reject) {
    db.collection('data').find(query).toArray(function(err, res) {
      if (err) {
        throw err;
        reject(-1);
      }
      resolve(res);     
    }    
  });

  promise.then(function(result) {
    return result;
  }, function(err) {
    return -1;
  });
}

【问题讨论】:

    标签: javascript node.js database server promise


    【解决方案1】:

    我的服务器返回一个空回复。那我做错了什么?

    您的dbRes 将是undefined,因为您期待异步承诺执行的响应。只有在 promise 解决后才需要发送响应。

    对您的代码进行此更改

    http.createServer(function (request, response) {
      if (request.method === "GET") {
      ...
        dbFunc.getFromDB(query).then((dbRes) => {
          response.statusCode = 200;
          response.setHeader('Content-Type', 'application/json');
          response.end(JSON.stringify(dbRes));
        }).catch((err) => {
          console.log('err', err.stack);
        });
    
      }
    }).listen(port);
    

    另外,你需要在db执行部分返回Promise。

    exports.readHandeler = function (query) {
      return new Promise(function (resolve, reject) {
        db.collection('data').find(query).toArray(function (err, result) {
          if (err) {
            return reject(err); // or -1 based on your need
          }
          return resolve(result);
        });
      });
    };
    

    【讨论】:

    • 谢谢我试试看,=> 符号是什么意思?
    • 这是一个更短的函数,没有绑定this。例如,您可以查看mdn
    • 好的,我明白了,你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2017-09-13
    • 1970-01-01
    • 2012-10-09
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多