NoedJS forEach с добавлением нового элемента в http-запрос - PullRequest
0 голосов
/ 17 мая 2018

как добавить новый элемент в массив с запросом http.

У меня есть такой код, но он не добавляет новый элемент из-за асинхронности на nodejs, и я не знаю, как я могу это сделатьпередайте его.

   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 голосов
/ 17 мая 2018

Вы должны использовать 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))
0 голосов
/ 17 мая 2018

используйте 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);
    }
});
0 голосов
/ 17 мая 2018

Вы можете попробовать этот популярный узел модуля Async .Попробуйте это .ee здесь http://caolan.github.io/async/docs.html#each.

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