javascript - Node js 数组仪表板

标签 javascript node.js backend

我正在使用 Node js 做我的应用程序的后端。在这种情况下,我试图获取典型的仪表板,如 facebook、instagram、.... 对于一个用户,我试图在哪里吸引他关注的用户。当我得到一系列用户关注时,我找到他们拥有的“recetas”(一个用户可以拥有多个)。最后,我将所有这些记录添加到一个数组中,但问题是返回的是空的。

getDashboard = function (req, res) {
  var myarray = new Array();
  //myarray = [];
  User.findById(req.params.id, function (err, user) {
    if (!user) {
      res.send(404, 'User not found');
    }
    else {
      var a = user.following;
      a.forEach(function (current_value) {
        Receta.find({ "user_id": current_value._id }, function (err, recetas) {
          if (!err) {
            recetas.forEach(function (receta) {
              myarray.push(receta);
            }
          } else {
            console.log('Error: ' + err);
          }
        });
      })
      res.send(myarray);
    }
  });
};

最佳答案

您正在处理一个常见的异步问题。 Receta.find 是异步的,它不是阻塞操作,因此在所有 Receta.find 调用完成之前调用 res.send 。您可以使用 Promises 来解决此问题,假设它们在您的 Node 版本中可用:

var a = user.following;
var promises = a.map(function(current_value) {
    return new Promise(function(resolve, reject) {
        Receta.find({"user_id":current_value._id}, function (err, recetas) {
            if(!err) {
                resolve(recetas);
            } else {
                reject(err);
            }
        });
    });
});

Promise.all(promises).then(function(allData) {
    res.send(allData);
}).catch(function(error) {
    res.send(error);
});

如果原生 Promise 不可用,您可以使用类似 Q 的库。或bluebird

关于javascript - Node js 数组仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053223/

相关文章:

api - 保护 Express API

javascript - 我想知道 Facebook 如何将您发布的内容(例如网络链接)更改为对话框中的小部件

javascript - 使用 AJAX 设计和 SEO 单页动态网站

javascript - jquery 创建的下拉列表不显示在 ie8 中

node.js - Heroku、node.js、服务器崩溃并出现错误 : Most middleware (like logger) is no longer bundled with Express and must be installed separately

javascript - 为什么这个简单的函数不能在这个 javascript 状态机中的这个对象上运行?

node.js - Node.js 和 CouchDb 应用程序结构的建议

javascript - js 在使用 history.pushstate 后设置默认 url

javascript - 使用 React hooks 从另一个页面使用 useEffect 更新状态

php - 在 Woocommerce 的管理员订单列表中添加一列优惠券