결과적으로 잘~ 작동합니다! 하지만, 만약 저 코드 양이 방대해진다면, 본인은 물론 다른 사람도 보다가 미쳐서 모니터를 주먹으로 칠 수도 있습니다.
그래서 나온것이 Promise() 입니다.
예시2) Promise() : 여러 개의 then() 사용하기
function delayP(sec) { // 인자를 시간초만 받음
return new Promise( ( resolve, reject ) => { // Promise (성공, 실패) 선언
setTimeout(() => {
resolve (new Date().toISOString()) // resolve(성공)에 해당하는 항목
}, sec * 1000)
})
}
then()
delayP(1)
.then((result)=> {
console.log(1, result)
return delayP(1) // delayP() 를 return 시켜 새로운 promise를 실행하는 것. then으로 이어 받을 수 있다.
})
.then((result) => { // 2번 째 then을 통해서 위의 첫번째 then이 실행된 이후에 실행. 즉, 1초 + 1초 에 실행된다.
console.log(2, result)
})
Promise() .then() 을 사용하는 것의 장점은 더 말할 필요가 없이 보기가 쉽습니다.
또한 구분지어서 코드를 작성하는데에도 문제가 없죠.
출력 결과
하지만 만약 반환값(return)을 작성해주지 않는다면,
delayP(1)
.then((result)=> {
console.log(1, result)
return delayP(1) // delayP() 를 return 시켜 새로운 promise를 실행하는 것. then으로 이어 받을 수 있다.
})
.then((result) => { // 2번 째 then을 통해서 위의 첫번째 then이 실행된 이후에 실행. 즉, 1초 + 1초 에 실행된다.
console.log(2, result)
// return이 없다. => 다음 result = undefined가 될 것이다.
// return 'string or something' 하면 해당하는 내용이 바로 출력된다.
// => delay를 통해 해당 내용을 지연시키지 않았기 때문에.
})
.then((result) => { // 받은 return 값이 null 이기 때문에 undefined를 출력한다.
console.log(3, result) // 출력 내용 ( 3, undefined )
})
2번째then에서 return이 없습니다!
=> 3번째delayP( null ) 이 들어갔다는 뜻입니다.
그렇기 때문에 출력되는 것은( 3, undefined ) 가 됩니다.
출력 결과
추가적으로 sec 라는 인자도 전달이 안되었기 때문에 바로 세번째 then() 이 실행되어 3, result 가 출력되었습니다.
systemctl status apache2.service
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2021-10-27 14:16:45 KST; 16min ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 475439 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
10월 27 14:16:45 server systemd[1]: Starting The Apache HTTP Server...
10월 27 14:16:45 server apachectl[475447]: apache2: Syntax error on line 231 of /etc/apache2/apache2.conf: Could not open configuration file /etc/phpmyadmin/apache.conf: No such file or directory
10월 27 14:16:45 server apachectl[475439]: Action 'start' failed.
10월 27 14:16:45 server apachectl[475439]: The Apache error log may have more information.
10월 27 14:16:45 server systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
10월 27 14:16:45 server systemd[1]: apache2.service: Failed with result 'exit-code'.
10월 27 14:16:45 server systemd[1]: Failed to start The Apache HTTP Server.
환경: Linux Ubuntu 20.0.4LTS, PHP8, Apache 사용
사전 작업 : php7.4 -> php 8.0으로 업그레이드 (완료)
이에 해당하는 에러를 어떤 사람이 /etc/apache2/apache2.conf 파일의 수정을 통해 해결했다는 내용이 있었다.
이에 맞춰 apache2.conf 를 자세히 보던 와중 에러 문구가 눈에 띄었다.
phpmyadmin 부분에서 문제라는 것을 확인하였다.
그래서 과감하게 (사실은 소심하게 주석까지 해주면서ㅋㅋ) phpmyadmin을 사용하지 않으니 해당 부분을 주석처리하여 서버(server)를 구동할 때 해당 부분을 읽지 않게하였더니 성공.
=> 하지만 이것은 phpmyadmin을 사용하시는 분들은 하면 안된다는 것을 확인해주세요.
아무래도 php 버전업그레이드(7.4->8.0 upgrade)를 하면서 phpmyadmin 고유의 데이터베이스(database)를 놓고, 해당 부분을 추가적으로 손보지 않았기 때문에 이러한 에러가 발생한 것 같았다.
sudo apt install nodejs
sudo apt install npm
// cache 제거. 안해주시면 에러 발생가능성이 있습니다.
sudo npm cache clean -f
// 전역에서 사용가능하게 npm을 n이라는 이름으로 다운로드
sudo npm install -g n
// 안정화 버전을 설치
sudo n stable
3. 확인
node -v
v16.13.0
npm -v
8.1.0
자꾸 오류 나고 그래서 삭제만 8번 넘게 진행한 것 같네요.
억울하고 분통터져
원래 뭘 진행하려고 했는지도 머리속에서 증발하게 되었습니다. ㅎㅎ 다시 무엇을 하려고했는지 떠나요~