如何在Node JS中执行forloop

克尔普

根据可用的数据ui应该得到2结果,但是因为我把res.send放入了循环所以只有1结果,所以它结束了,有人可以帮我吗……。

exports.getrequestsdetails = function(req, res) {
    var params = req.params;
    console.log(params)
    var record = db.collection('requests');
    var item = {
        "sent_id": params.id,
        "status": 1
    }
    record.find(item).toArray((err, result) => {
        if (err) {
            return
        }
        if (result) {
            for (var i in result) {
                var id = result[i].recieved_id;
                var profile = db.collection('profile');
                profile.find({
                    '_id': new ObjectId(id)
                }).toArray((err, resp) => {
                    if (err) {
                        return
                    }
                    if (resp) {
                        console.log(resp);
                    } else {}
                });
            }
            res.send(resp);
        } //end of if loop
        else {
            response = {
                status: 'fail',
                data: []
            };
        }

    });

}
马丁·戈特威斯(Martin Gottweis)

问题在于获取配置文件。您正在使用mongodb的find,它是异步的因此,在您的for循环中,您开始获取配置文件,但随后res.send在配置文件获取完成之前将井发送出去

从回调profile.find(...将被执行res.send除此之外,该resp变量位于find回调内部,而您正尝试在res.send其外部。

为了解决这个问题,您可以使用asyncpromises请参阅下面的使用Promise的代码。

var Promise = require('bluebird')

exports.getrequestsdetails = function(req, res) {
    var params = req.params;
    console.log(params)
    var record = db.collection('requests');
    var item = {
        "sent_id": params.id,
        "status": 1
    }

    record.find(item).toArray((err, result) => {
        if (err) {
            return
        }
        if (result) {

            var profiles_to_get = []
            var profiles = []

            for (var i in result) {
                var id = result[i].recieved_id;
                profiles_to_get.push(get_profile(id, profiles))
            }

            Promise.all(profiles_to_get)
                .then(() => {
                    res.send(profiles);
                })
        } //end of if loop
        else {
            response = {
                status: 'fail',
                data: []
            };
        }

    });

    function get_profile (id, profiles) {
        return new Promise(function (resolve, reject) {
            var profile = db.collection('profile');
                profile.find({
                    '_id': new ObjectId(id)
                }).toArray((err, resp) => {
                    if (err) {
                        reject(err)
                        return
                    }
                    if (resp) {
                        profiles.push(resp)
                        resolve()
                    } else {
                        reject()
                    }
                });
        })
    }

}

这是如何工作的,它创建了一个配置文件列表以查找并将其存储在中var profiles_to_get = []您使用的Promise.All(profiles_to_get)可以让您在获取所有配置文件后执行操作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在node.js中异步执行多个REST API请求?

来自分类Dev

如何在Node.js中执行三元运算

来自分类Dev

如何在Node.js中执行64位整数运算?

来自分类Dev

如何在Node.js中的单独线程上执行DOS命令?

来自分类Dev

如何在Node JS中执行/中止长时间运行的任务?

来自分类Dev

如何在Node.JS中执行多个查询(构建数据库)?

来自分类Dev

如何在node.js中搜索?

来自分类Dev

如何在Node.js的Promise中完成执行?

来自分类Dev

如何在Node.js中解释和执行异步javascript?

来自分类Dev

如何在Node JS中打印对象

来自分类Dev

如何在Node js中创建图像?

来自分类Dev

如何在Node.js中执行顺序基本命令?

来自分类Dev

如何在mongodb的node.js实现中执行不区分大小写的查询?

来自分类Dev

如何在Node.js中检测键序列以执行某些操作

来自分类Dev

如何在Node.JS中对对象的数据执行减法?

来自分类Dev

如何在node.js中以字符串形式执行PHP程序?

来自分类Dev

如何在Node.js中执行一系列同步和异步功能

来自分类Dev

如何在node.js中执行符号链接文件?

来自分类Dev

如何在node.js中异步执行多个REST API请求?

来自分类Dev

如何在Node.js服务器中执行JavaScript

来自分类Dev

如何在Node.js中执行三元运算

来自分类Dev

如何在Codelab中执行“ node server.js”?

来自分类Dev

如何在Node.js中的单独线程上执行Dos命令?

来自分类Dev

如何从SqlDataReader中获取值以进行forloop执行?

来自分类Dev

如何在Node.JS中执行多个查询(构建数据库)?

来自分类Dev

如何在node.js中执行回调函数?

来自分类Dev

如何在 node.js 中的异步和条件循环中执行嵌套查询

来自分类Dev

如何在 Node js 中添加会话

来自分类Dev

如何在 Node js 中检查下载时间和执行情况?

Related 相关文章

  1. 1

    如何在node.js中异步执行多个REST API请求?

  2. 2

    如何在Node.js中执行三元运算

  3. 3

    如何在Node.js中执行64位整数运算?

  4. 4

    如何在Node.js中的单独线程上执行DOS命令?

  5. 5

    如何在Node JS中执行/中止长时间运行的任务?

  6. 6

    如何在Node.JS中执行多个查询(构建数据库)?

  7. 7

    如何在node.js中搜索?

  8. 8

    如何在Node.js的Promise中完成执行?

  9. 9

    如何在Node.js中解释和执行异步javascript?

  10. 10

    如何在Node JS中打印对象

  11. 11

    如何在Node js中创建图像?

  12. 12

    如何在Node.js中执行顺序基本命令?

  13. 13

    如何在mongodb的node.js实现中执行不区分大小写的查询?

  14. 14

    如何在Node.js中检测键序列以执行某些操作

  15. 15

    如何在Node.JS中对对象的数据执行减法?

  16. 16

    如何在node.js中以字符串形式执行PHP程序?

  17. 17

    如何在Node.js中执行一系列同步和异步功能

  18. 18

    如何在node.js中执行符号链接文件?

  19. 19

    如何在node.js中异步执行多个REST API请求?

  20. 20

    如何在Node.js服务器中执行JavaScript

  21. 21

    如何在Node.js中执行三元运算

  22. 22

    如何在Codelab中执行“ node server.js”?

  23. 23

    如何在Node.js中的单独线程上执行Dos命令?

  24. 24

    如何从SqlDataReader中获取值以进行forloop执行?

  25. 25

    如何在Node.JS中执行多个查询(构建数据库)?

  26. 26

    如何在node.js中执行回调函数?

  27. 27

    如何在 node.js 中的异步和条件循环中执行嵌套查询

  28. 28

    如何在 Node js 中添加会话

  29. 29

    如何在 Node js 中检查下载时间和执行情况?

热门标签

归档