node.js - express中使用request,如何返回异步获得的结果?
ringa_lee
ringa_lee 2017-04-17 11:11:56
[Node.js讨论组]
// app.js使用t.js控制/t的路由
app.use('/t',require('t'));

在t.js(router)中,要send回tt.topic的值,这里是个JSON

router.get('/:id',function(req, res) {
  var api = tt.topic(req.params.id);
  res.send(api);
});

在tt.js(model)中,要通过Request获得数据进行过滤返回

tt.topic = function(id) {

  var apiurl = 'api url';

  var s = req(apiurl,doTheRequest);

  function doTheRequest(error, response, body) {
    if (!error && response.statusCode == 200) {
      var data = JSON.parse(body).result;
      console.log(data); // 我这里能拿到数据,但由于是异步的,怎么返回给主进程,进而通过res.send(data)出去?
    }
  }
  return obj; // 这个无效,异步执行去了,这里返回undefined
}

module.exports = tt;

问题都在代码中了,request异步后怎么把值能返回给调用request的函数?进而返回给router,去res.send?
查了API,request没有end这种事件?
上Q.js能起到作用么?

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
高洛峰

都异步了,就异步到底呗,别老想return了
一般tt.topic里把res传递进去就可以了吧

tt.topic = function(id, res) {
  var apiurl = 'api url';
  var s = req(apiurl,doTheRequest);

  function doTheRequest(error, response, body) {
    if (!error && response.statusCode == 200) {
      var data = JSON.parse(body).result;
      res.send(data);
    }
  }
}

router.get('/:id',function(req, res) {
    tt.topic(req.params.id, res);
});

至于Q.js我没用过,我只用过js原生的promise,node.js上应该可以用node的Promise库
大概把tt.topic改成这样

tt.topic = function(id) {
  return new Promise(function(resolve, reject) {
      var apiurl = 'api url';
      var s = req(apiurl,doTheRequest);

      function doTheRequest(error, response, body) {
          if (!error && response.statusCode == 200) {
              var data = JSON.parse(body).result;
              resolve(data);
          } else 
          reject(error);
      }
  });
}

router.get('/:id',function(req, res) {
  tt.topic(req.params.id).then(function(data) {
    res.send(data);
  });
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号