Validando 링크는 Promise.all( )!
Antes de tudo, gostaria de agradecer ao meu 멘토: Ariel Ferreira(NUBANK의 소프트웨어 엔지니어), pela orientação, condução e provocação para encontrar a solução para o problema. 바모스 라!
운동 제안:
Era necessário checar se as urls contidas em uma lista de objetos estavam válidas, ou seja, fazendo uma requisição GET, o status code deveria ser retornado como 200 e ,só assim, inserir um novo campo: “status: valido”. E em seguida filtrar somente os campos válidos.
Segue abaixo a lista.
const linksList = [
{url: "https://images.dog.ceo/breeds/leonberg/n02111129_3301.jpg",},
{url: "https://images.dog.ceo/breeds/leonberg/n02111129",},
{url: "https://images.dog.ceo/breeds/bulldog-english/mjpg",},
{url:"https://images.dog.ceo/breeds/spanielbrittany/n02101388_3365.jpg",},
{url:"https://images.dog.ceo/breeds/spaniel-brittany/n02101388_3365.jpg",},
];
A requisição seria feita utilizando a biblioteca “node-fetch”.
문제a:
O node-fetch retorna por default uma promessa e as promessas são execuções de código assíncrono, ou seja, não são realizadas na mesma thread do código síncrono e necessita ser resolvida antes de podermos trabalhar com elas.
Para percorrer a lista foi utilizado o método .map:
Função check링크
const checkLinks = async (obj) => {
const checkedLinks = obj.map(async (link) => {
const checkLinkStatus = await fetch(link.message);
if (checkLinkStatus.status !== 200) {
return { ...link, status: "failed" };
}
return { ...link, status: "success" };
});
return checkedLinks.filter((item) => item.status === "success");
};
E foi neste momento que o meu mentor me direcionou para o ponto principal: a variável checkedLinks estaria retornando uma promise e me conduziu para pesquisas e leitura de documentações.
Retorno variável checkedLinks:
[
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
];
A função Promisse.all é resolve todas as promessas e as retorna de uma vez para que se possa trabalhar com os resultados de modo síncrono.
Promise.all 구현
const checkLinks = async (obj) => {
const checkedLinks = await Promise.all(
obj.map(async (link) => {
const checkLinkStatus = await fetch(link.message);
if (checkLinkStatus.status !== 200) {
return { ...link, status: "fail" };
}
return { ...link, status: "success" };
})
);
return checkedLinks.filter((link) => link.status === "success");
};
[
{
message: "https://images.dog.ceo/breeds/leonberg/n02111129_3301.jpg",
status: "success",
},
{
message:"https://images.dog.ceo/breeds/spaniel-brittany/n02101388_3365.jpg",
status: "success",
},
{
message:"https://images.dog.ceo/breeds/spaniel-brittany/n02101388_3365.jpg",
status: "success",
},
]
결론:
Quando estiver manipulando promessas atente-se se elas estão sendo resolvidas para depois utilizar técnicas síncronas para alcançar os resultados desejados.
Vou deixar uns link abaixo com materiais muito bons acerca de promise.
MDN - PROMISE
Reference
이 문제에 관하여(Validando 링크는 Promise.all( )!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ricardogithub84/validando-links-com-o-promiseall--43b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)