javascript - 如何从 JavaScript 中查询数据库的 for 循环返回值?

标签 javascript node.js

geturls(data,function(urls){
    var data = {
        "data": [
            { "userProfile": userP },
            { "urls": urls }
        ]
    };
    res.send(data);
});


function getUrls(data,done){

    links = new Array();

    for (var i=0; i<data.length; i++){
        user = data[i]
        Url.find({where:{data.id}}).success(function(url){
            links.push({
                "url": ur.text,
                "date": data.syncedTime
            });

            if (urls.length == data.length){
                done(links);
            }
        });
    }
}

我的代码的问题是这样的:

一旦数组中收集的数据等于父数组的长度,我将通过回调返回响应。这显然是一个非常危险且不太优雅的解决方案。假设我从 Url 数据库收到 .failure,那么我的 urls.length 将不等于 data.length。所以,我有点困惑如何去做这件事。 有什么帮助吗?

最佳答案

如果您使用async.js,这对您来说会很容易.

我用了mapSeries这里。它需要 3 个参数。

  • 集合/数组
  • 迭代器,将为传递的集合/数组中的每个项目调用两个参数。 1. 集合中的项目,2. 回调。在迭代器中完成工作后,您应该以 Node 样式调用回调(先出错,然后结果)。
  • 最终回调,将在映射集合中的所有项目后调用。

function getUrls(data,done){

  var async = require('async');

  async.mapSeries(data, function(user, cb) {//If you want it to be async `async.map`

    Url.find({where:{user.id}}).success(function(url){
      cb(null, {
            "url": url.text,
            "date": user.syncedTime
      });
    });
  }, function(err, results) {
    //results is an array. Its the same as `links` in your old code.
    done(results);
  });

}

geturls(data,function(urls){
  var data = {
    "data": [
        { "userProfile": userP },
        { "urls": urls }
    ]
  };
  res.send(data);
}); 

关于javascript - 如何从 JavaScript 中查询数据库的 for 循环返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17377324/

相关文章:

javascript - d3 条形图 - 尝试将刻度线排列到条形图上

javascript - 未捕获的语法错误 : missing ) after argument list 5

同一页面中的 Javascript 和 JQuery

node.js - 如何在 REST API 中公开 MongoDB 文档主键?

javascript - NodeJS 套接字发出返回未定义

php - 当需要配置控制时,我应该如何存储多个相关模型?

javascript - 我重新检查了语法,无法查看加载的页面中的 href 链接

javascript - 如何将参数传递到 Backbone 集合并重置

javascript - 如何使用 MongoDB 和 Jade (Express.js) 通过 _id 删除文档?

javascript - 通过ajax将字符串发送到运行express.js的Node.js服务器无法正常工作