#node.js
#node.js
Вопрос:
Здесь я делаю несколько http-запросов по ссылкам, которые я отфильтровал заранее. Ссылки находятся внутри массива в строковом формате.
for (let link of linkArray) {
const linkOptions = {
uri: link,
resolveWithFullResponse: true,
};
linkRequest = await rp(linkOptions);
//some other actions with linkRequest response
}
Но, конечно, the request statuses of the links can be some bad ones
(например 404 forbidden errors
, коды статуса в основном терки, чем 300).
Здесь я не хочу, чтобы программа была уничтожена, вместо этого я хочу пропустить ответ, который запрещен, и продолжить проверку оставшихся ссылок linkArray
.
Что я пробовал до сих пор:
под комментарием я проверил statusCodes
, если это какой-то плохой, чем продолжить итерацию цикла.
if (assetsRequest.statusCode === 204 || assetsRequest.statusCode >= 300) continue
Но запрос завершается ошибкой, когда это неверный запрос, в любом случае, не дожидаясь моей проверки. Есть идеи, как с этим справиться?
p.s. Я использую модуль запроса-обещания
Ответ №1:
Программа завершает работу, потому что вы не улавливаете ошибку.
Вы всегда должны перехватывать ошибки, особенно если вы выполняете процесс, подверженный ошибкам, такой как http-запрос.
Здесь я добавил try catch
for (let link of linkArray) {
const linkOptions = {
uri: link,
resolveWithFullResponse: true,
};
try {
linkRequest = await rp(linkOptions);
} catch(err) {
// do something with error or at least log it
console.log(err);
}
//some other actions with linkRequest response
}
Поэтому, когда rp () завершается с ошибкой, он переходит прямо к блоку catch, но не завершает цикл, следовательно, процесс продолжается для другой ссылки в массиве.