Mam problem z jakimś kodem NON PRODUKCJI. Chcę przetworzyć około 3000 elementów tablicy. Jeśli przejdę do procesu węzła, to jest on ustawiony na epoll_wait(5
, więc prawdopodobnie blokuję główny wątek.Dlaczego ta funkcja myFunction(). Then() wydaje się zawieszać w nieskończoność?
Czy ktoś może sugerować: a) co robię źle lub b) jak mogę spojrzeć na pętlę stosu realizacji/zdarzenia, aby dokładnie sprawdzić, dlaczego kod zwisa? Próbowałem debugować i przechodzić przez kod i proces ten działał, ale nie jestem mądrzejszy.
zaktualizowanego kodu przy użyciu Promises.map:
connection.query(firstPostQuery,{ x: whiteListString }, function(err, rows) {
Promise.map(rows, function(result) {
return sfs.isSpammer({
ip: result.ip,
email: result.email,
username: result.poster
}).then(function(res) {
console.log(parseInt(res.username.appears) == 1); //evaluates to true
if (parseInt(res.username.appears) == 1) {
console.log(res.toJSON());
fs.appendFile(__dirname + '/stopforumspam.txt', res.poster + '\n',
function(err) {
if (err) {
throw err;
}
return true;
});
} else {
fs.appendFile(__dirname + '/stopforumspam.txt',
'nope\n',
function(err) {
if (err) {
throw err;
}
return true;
});
}
});
//Iteration completed
}, {concurrency: 5}).then(function(result) {
//Do something with result
console.log(result);
}).catch(function(err) {
//Error
});
});
biegnę przed node.js 4.2.4. Eksperymentowałem z obietnicami Bluebird, ale nie jestem pewien, czy byłoby to przydatne w tym przypadku, ponieważ nie w pełni rozumiem obietnice (jeszcze).
Robisz wszystkie 3000 wniosków na raz, więc może to tylko, że cokolwiek maszyna/usługa żądasz jest zajęty do przetwarzania wszystkie te wnioski czy to może być, że usługa nie może obsłużyć SFS 3000 i wnioski zawiesza się. – slebetman
@leblebet dzięki. Jak podchodziłbyś do spowalniania tego i składania wniosków w małych partiach? Próbowałem już różnych bibliotek, które twierdzą, że to robią, ale też nie rozwiązały problemu. – codecowboy
@ codecowboy, właściwie, mieszałeś synchronizację. pętla, z obietnicami, dlatego masz usterki. –