개발을 진행하다보니 conn.query부분이 비동기적으로 작동하여 순서를 보장받지 못하였다. 내가 원하는 것은 순서를 보장을 받고 싶었고 conn.query의 콜백 함수의 함수를 넣고 그 콜백 함수의 콜백함수의 함수를 넣었고... 이렇게 반복이 되었다.
위에 이미지를 보게 되면 query함수의 콜백 함수로 query함수를 호출하였고 그 query함수의 콜백 함수를 또 호출하였다. 상당히 복잡하다. 이것을 리팩토링 할 필요가 있었다.
bbsPromise 함수를 만들었다. Promise 사용하려면 코드는 거의 중복되는 것이 많기 때문에 함수로 뺐다.
위에 이미지에서 bbsPromise 함수로 빼지 않았다면 좀 더 길어지고 복잡해졌을 것이다. 하지만 함수로 뺐기때문에 인자만 넘겨주어서 resolve, reject를 반환할 수 있게 하였다.
query1함수가 성공적으로 끝내어 resolve를 반환하면 then으로 빠진다. 반면에 에러가 발생하면 catch로 빠진다. 이렇게 하여 비동기를 동기적으로 변환할 수 있었다.
마찬가지로 bbsPromise함수를 사용하여 promise객체를 반환하는 SQL문을 작성한다.
promise.all을 하게 되면 promise 배열에 있는 promise 객체 전부 resolve가 되어야지 then으로 빠지게 된다. 하나라도 reject가 발생하면 catch쪽으로 빠지게 된다. 만약 여러개의 SQL문이 필요할 때에는 promise.all을 사용하는 것이 좋을 것 같다.