发布
社区首页 >问答首页 >在rpc操作中对mysql的socketstream异步调用

在rpc操作中对mysql的socketstream异步调用
EN

Stack Overflow用户
提问于 2013-04-07 19:32:26
回答 1查看 416关注 0票数 1

首先,我需要告诉你的是,我对nodejs,socketstream,angularjs和JavaScript的奇迹还很陌生。我来自Java背景,这可能解释了我对异步处理的正确方式的无知。

为了玩弄一些东西,我安装了americanyak的ss-angular-demo。我现在的问题是,Rpc似乎是一个同步接口,而我对mysql数据库的调用有一个异步接口。如何在调用Rpc时返回数据库结果?

以下是我到目前为止对socketstream 0.3所做的工作:

在app.js中,我通过将ss.api.add('coolStore',mysqlConn);放在正确的位置(as explained in the socketstream docs),成功地告诉ss允许访问我的mysql数据库连接。我使用mysql npm,因此可以在Rpc中调用mysql

server/rpc/coolRpc.js

代码语言:javascript
代码运行次数:0
复制
exports.actions = function (req, res, ss) {

  // use session middleware
  req.use('session');

  return {
    get: function(threshold){
      var sql = "SELECT cool.id, cool.score, cool.data FROM cool WHERE cool.score > " + threshold;
      if (!ss.arbStore) {
            console.log("connecting to mysql arb data store");
            ss.coolStore = ss.coolStore.connect();
      }

      ss.coolStore.query(sql, function(err, rows, fields) {
            if(err) {
                    console.log("error fetching stuff", err);
            } else {
                    console.log("first row = "+rows[0].id);
            }
      });
      var db_rows = ???
      return res(null, db_rows || []);
    }
  }

如预期的那样,控制台记录我的数据库条目的id。但是,我不知道如何让Rpc的return语句返回查询的行。解决这类问题的正确方法是什么?

谢谢你的帮助。请对我友好一点,因为这也是我关于stackoverflow的第一个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 20:12:38

它不是同步的。当你的结果准备好后,你可以把它们发回去:

代码语言:javascript
代码运行次数:0
复制
exports.actions = function (req, res, ss) {

  // use session middleware
  req.use('session');

  return {
    get: function(threshold){
      ...
      ss.coolStore.query(sql, function(err, rows, fields) {
        res(err, rows || []);
      });
    }
  }
};

您需要确保始终从RPC函数调用res(...),即使在发生错误时也是如此,否则可能会收到悬而未决的请求(客户端代码一直在等待从未生成的响应)。在上面的代码中,错误被转发到客户端,因此可以在那里进行处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15861879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档