Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用async和foreach在数组上迭代_Node.js_Express_Async.js - Fatal编程技术网

Node.js 如何使用async和foreach在数组上迭代

Node.js 如何使用async和foreach在数组上迭代,node.js,express,async.js,Node.js,Express,Async.js,我正在尝试创建一个api,该api将创建一个包含expressjs中成员的组。到目前为止,它是这样工作的: 在req.body中使用JSON对象发出post请求,我将使用它创建一个新组。如果req.body对象的成员数组包含成员id,则将其添加到组成员数组中,否则创建一个新用户,然后将其id添加到数组中 基本上,一个现有用户刚刚被添加,新用户将被创建,然后被添加。为此,我需要遍历req.body中的members数组并检查对象 但是下面的代码似乎不能正常工作。我得到了console.log(gr

我正在尝试创建一个api,该api将创建一个包含expressjs中成员的组。到目前为止,它是这样工作的:

req.body
中使用JSON对象发出post请求,我将使用它创建一个新组。如果
req.body
对象的成员数组包含成员id,则将其添加到组成员数组中,否则创建一个新用户,然后将其id添加到数组中

基本上,一个现有用户刚刚被添加,新用户将被创建,然后被添加。为此,我需要遍历
req.body
中的members数组并检查对象

但是下面的代码似乎不能正常工作。我得到了
console.log(group\u info.members)的奇怪结果。我希望它在数组中包含id为
id
的对象,但会得到随机结果。foreach循环中似乎有问题。请帮我弄清楚

var express = require('express');
var router = express.Router();
var Group = require('../models/GroupModel');
var User = require('../models/UserModel');
var async = require("async");

router.post('/', function (req, res, next) {
var group_members = [];
var group_info = req.body;

//see if a member object is sent, create user for that else just add the user id to group_members array

async.forEach(group_info.members, function (member, callback) {
    if (typeof member == "object") {
        //create new user and add the _id to members array
        var user = new User(member);
        user.save(function (err) {
            if (err) return res.status(500).send(err);
            var member_object = {id: user._id};
            group_members.push(member_object);
        }).then(callback);
    } else {
        var member_object = {id: member };
        group_members.push(member_object);
        callback();
    }
}, function (err) {
    //final call back
    group_info.members = group_members; //replace the original array in request body with the new array of users
    console.log(group_info.members);
    var group = new Group(group_info);
    group.save(function (err) {
        if (err) return res.status(500).send(err);
        res.json(group);
    });
});
});

看起来你犯了一个错误,这不是forEach,所以只需更换:

 async.forEach(group_info.members, function (member, callback)
与:

更新


正如评论中指出的那样,forEach
async
每个API的别名,您可以阅读文档,感谢@megawac指出这一点。

看起来您犯了一个错误,它不是forEach,所以只需更换:

 async.forEach(group_info.members, function (member, callback)
与:

更新


正如评论中指出的那样,forEach
async
每个API的别名,您可以阅读文档,感谢@megawac指出这一点。

看起来您一直删除了异步库。如果我这样做,我需要在代码中处理这一切。这是首先使用异步的基本思想。使用相同的过程(例如todo,done),但只需调用callback而不是savegroups看起来您一直都删除了异步库。如果我这样做,我需要在代码中处理这一切。这就是最初使用异步的基本思想。使用相同的过程(例如todo,done),但只需调用callback而不是saveGroupI,最后使用async.each系列。谢谢forEach实际上只是每个
()的别名,我最终使用了async.each系列。谢谢forEach实际上只是每个
()的别名,看起来您实际上想使用它而不是
forEach
,它将为您管理
组成员
数组看起来您实际上想使用它而不是
forEach
,它将为您管理
组成员
数组
async.eachSeries(group_info.members, function (member, callback)