回送异步数据调用Node.js

tecx20

我有一种方法可以返回最新剧集发布的节目列表,这些方法都可以返回剧集的总数。我有点陷入循环部分,我需要计算结果数组中所有节目的节目,因为查询调用是异步的,我无法合成它们。很好,可以为这个问题提供解决方案

server.models.Eps.find({
  include:'show',
  order: 'dateadded DESC',
  limit: 10 },function (err,episodes) {
  if(err)
  { console.log(err);
    return  res.sendStatus(500);
  }
  var show = [];
  var p1 = new  Promise(function (resolve,reject) {
    for(var  i = 0; i < episodes.length;i++)
    {
      var sh = episodes[i].show();
      server.models.Eps.count({'show_id': show.id},function (err,value) {
        if(err) {
          console.log(err);
          return res.statusCode(500);
        }
        console.log(value);
        sh.episodeCounts = value;
        show.push(sh);
      });
    }
  });
  Promise.all([p1])
    .then(function (values) {
      return res.send(show);
    });
});
里西奥

这里要指出几点。show被定义为空数组,但随后在查询中引用ID server.models.Eps.count({'show_id': show.id},function (err,value) {我认为show是情节数据结构上的关键,因此不应该作为函数调用吗?另外,我不确定您为什么要使用Promise.all一个单一的承诺。

我想我了解您正在努力实现的目标。

您可以通过两种方法来完成此操作,一种方法需要最少的更改,而另一种方法可能会被认为更好。

  1. 您可以使用异步异步遍历数组。它应该可以正常工作,但是以这种方式混合回调和promise不是很好(我个人认为:))

    var async = require( "async" );
    var shows = [];
    
    async.each( episodes, function( episode, cb ){
      var show = episode.show;
      server.models.Eps.count({'show_id': show.id},function(err,value) {
        if(err) {
          console.log(err);
          cb( err );
        }
        console.log(value);
        show.episodeCounts = value;
        shows.push(sh);
      },
      function( err ){
        if( err ){
          return res.statusCode(500);
        }
        else callback();
      });
    });
    
  2. 您可以做的另一件事是将server.models.Eps.count函数包装在返回promise的包装器中。这样一来,您可以使用一种更具前景的方法来处理异步调用。就像是:

    server.models.Eps.find({
      include:'show',
      order: 'dateadded DESC',
      limit: 10 },function (err,episodes) {
      if(err){
        console.log(err);
        return res.sendStatus(500);
      }
      var promises = [];
      for(var  i = 0; i < episodes.length;i++)
        var show = episodes[i].show;
        promises.push( appendEpisodeCount( show ) );
      }
      Promise.all( promises )
        .then(function( shows ) {
          return res.send( shows );
        })
        .catch( function( err ){
          res.statusCode( 500 );
        });
    });
    
    function appendEpisodeCount( show )
      var promise = new Promise( function( resolve, reject ){
        var query = {
          show_id: show.id
        };
        server.models.Eps.count( query,function(err,value) {
          if( err ) return reject( err );
          show.episodeCount = value;
          resolve( show );
        });
      });
      return promise;
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js-异步方法调用问题

来自分类Dev

递归,Node js和异步调用

来自分类Dev

Node.js杀死异步调用

来自分类Dev

Node.js /使Redis异步调用

来自分类Dev

node.js redis 异步调用

来自分类Dev

节点JS异步数据库调用

来自分类Dev

Node.js用异步数据响应

来自分类Dev

Node JS +异步返回结果加入数据

来自分类Dev

正确的过程以在Node.js中调用多个异步函数

来自分类Dev

Node和异步api调用中的Bluebird.js

来自分类Dev

Node.js的异步调用和递归

来自分类Dev

API调用的异步并行与node.js中的回调

来自分类Dev

Node js异步mongodb find()查询多个调用

来自分类Dev

Node.js-如何通过回调调用异步函数?

来自分类Dev

正确的过程以在node.js中调用多个异步函数

来自分类Dev

AngularJS和Node.js的异步调用

来自分类Dev

带有Express异步API调用的Node.JS

来自分类Dev

Api 数据与 Node.js 异步并检索数据使其同步

来自分类Dev

异步node.js数据流混乱

来自分类Dev

如何抓取使用node.js异步加载数据的网站?

来自分类Dev

在Node.js中处理异步数据库

来自分类Dev

循环以在Node.js Sequelize中获取异步数据

来自分类Dev

使用Node.js和Java异步获取MQTT数据

来自分类Dev

node.js:如何使异步数据全局可用

来自分类Dev

Node.js同步与异步

来自分类Dev

Node.js异步读写

来自分类Dev

在node.js中正确放置具有多个异步redis调用的回调

来自分类Dev

如何在Node.js中通过异步调用重用测试功能?

来自分类Dev

Node.js并行异步调用,但具有优先级