비동기
나는 비동기의 세계와 그것을 탐색하는 데 도움이 되는 Javascript 기능에 대해 연구하고 게시하기 위해 몇 가지 생각을 하고 있습니다.
그러나 항상 그렇듯이 더 시급한 느낌이 드는 무언가가 방해가 되며 더 이상 할 수 없을 때까지 미루게 됩니다. 그 순간이 오늘 나에게 다가왔다.
이 글을 쓸 때 내 의도는 내가 직면하고 해결한 문제를 설명하고 그것을 처리하기 위한 대안 전략에 대해 읽고 보고하는 것입니다. 나는 약속과 특히 async/await를 다루기를 희망합니다.
문제
내가 고심했던 기능은 다음과 같습니다.
아참, 여기에서 사용한 방식
git
에 정말 만족합니다. 나는 내가 다시 방문하고 싶다고 생각한 흥미로운 점을 기록하기 위해 커밋을 사용했습니다. 문제를 해결하고 원래 상태에 대해 게시하기로 결정한 후 커밋 기록으로 롤백하여 여기에 붙여넣는 이전 상태를 찾을 수 있었습니다.app.post('/api/create', (req, res) => {
var email = req.oidc.user.email
//below should really be a 'find one query'
var userName = fetchUsername.getUserNameFromEmail(email, (err,data)=>{
if (err){
throw (err)
} else {
console.log('test', data[0].username)
return data[0].username
}
})
console.log(userName)
var title = req.body.title
var text = req.body.text
const author = {userName:userName}
fetch.createPost(title, text, author, (err,data)=>{
})
})
블로그 게시물을 제출한 후 React는 UserName 문제로 인해 피드(새 게시물 포함)를 렌더링할 때 오류를 발생시킵니다. 수동 쿼리를 수행하여 db를 조사한 결과 userName 필드 입력 없이 문서가 저장되고 있었다고 합니다.
나는 한 가지 분명한 문제를 해결하기 위해 시간을 보냈습니다. 바로 userName을 요구하도록 블로그 스키마를 변경하는 것입니다. 그러나 그것은 내가 기꺼이 커밋할 수 있는 토끼 구멍이었기 때문에 누락된 사용자 이름의 특성을 파악하는 데 다시 초점을 맞췄습니다.
이메일 주소에 오류가 있는지 확인하기 위해 일부 로깅을 수행했는데 이메일 주소를 잘못 읽고 큰따옴표로 묶어 저장한 것으로 나타났습니다. 그러나 그것이 내 문제의 원인이 아니었습니다. 나는 그 작은 버그를 수정하고 검색을 계속했습니다.
여기서 저는 데이터베이스 쿼리를 변수에 반환하려고 시도했음을 지적하겠습니다. 제가 인식한 것은
Node
세계에서는 비표준이지만 표준 코딩 관행으로 편안하게 수행할 수 있습니다. 디버깅 프로세스의 이 시점에서 이것이 내 문제의 원인이라고 의심하기 시작했습니다.문제 발견
내 데이터 가져오기 프로그램에서 반환된 내용을 확인하기 위해 몇 가지 로깅 문(위 코드에 표시됨)을 던졌고 다음 결과를 얻었습니다.
undefined
test zach
이것은 나에게 무엇을 말해주는가?
비동기가 발생합니다.
데이터 가져오기 프로그램이 데이터베이스를 쿼리하는 동안 인터프리터는 코드를 통해 아래로 이동하고 행 120:
console.log(userName)
에 도달하면 데이터가 이 변수에 값을 주기 위해 반환되지 않았으므로 대신 정의되지 않았습니다. 콘솔에 대한 결과 출력을 보니 유감스럽게도 undefined가 userName 값으로 createPost 함수에 입력됩니다.결국 쿼리 데이터는
test Zach
문에서 볼 수 있듯이 반환되지만 이 시점에서는 너무 늦습니다.앞으로 더
나는 내 솔루션이나 내가 존재한다고 생각하는 대안 전략에 도달하지 못했습니다. 다음 포스트를 위해 저장하겠습니다.
Reference
이 문제에 관하여(비동기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zbretz/async-108m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)