NoedJS forEach在http请求中添加新元素

时间:2018-05-17 07:10:31

标签: node.js asynchronous

如何使用http请求在数组中添加新元素。

我有一个像这样的代码但由于nodejs上的async而没有添加新元素,我不知道如何传递它。

   arr =  [
     { id: 123},
     { id: 124},
     { id: 125},
     { id: 126},
    ]
    arr.forEach(function(row, index) {
            request.post('/test')
                    .then((data) => {
                            row.status = "success"
                    })
                    .catch((error) => {
                            row.status = "failed"
                    });
    });

这样我就可以达到这样的目的。

[
 { id: 123, status: 'success' },
 { id: 124, status: 'failed' },
 { id: 125, status: 'failed' },
 { id: 126, status: 'success' },
]

我是NodeJ的新手。谢谢你们

3 个答案:

答案 0 :(得分:0)

您可以尝试使用此热门节点模块Async。试试这个。在这里http://caolan.github.io/async/docs.html#each

async.each(arr, _your_function, (err) => {
// check success
})
_your_function(){}

答案 1 :(得分:0)

您必须使用Promise.all,因为您正在处理多项承诺:

let arr =  [
     { id: 123},
     { id: 124},
     { id: 125},
     { id: 126}
]

Promise.all(arr.map((row, index) => {
    return request.post('/test')
        .then(data => {
            row.status = "success"
        })
        .catch(error => {
            row.status = "failed"
        });
})).then(() => console.log(arr))

答案 2 :(得分:0)

使用async.eachOf,您可以访问数组中的元素和索引。

var async = require("async");


var arr =  [
 { id: 123},
 { id: 124},
 { id: 125},
 { id: 126},
];

async.eachOf(arr, function(e, i, ecb){

     request.post('/test',)
    .then( (data) => {
            e.status = "success"
            return ecb(null);
    })
    .catch( (error) => {
            e.status = "failed"
            return ecb(null);
    });


}, function(err){

    if(err)
    {
        console.log("err");
    }
    else
    {
        console.log(arr);
    }
});