: 하나의 작업이 온전히 끝나지 않아도 다른 작업이 진행되는 방식
자바스크립트가 구동하는 환경을 런타임환경이라 하는데,js는 동기적인데 런타임에서 비동기처리를 대신해주기때문에 유튜브보는동시에 다운도 하고 공유도하고 가능
그런데 끝나는 순서를 순서대로 받고싶다. 처음엔 콜백함수로 해결했는데 너무 코드 가독성이 구려진다.
성공하면 resolve, 실패하면 reject로 값을 전달, 성공하면 .then으로, 실패하면 .catch로 값을 받게 된다. promise 에서 resolve('성공') 에 들어가는 '성공'이 then의 value로 간다.
promiseall로 하면 1초코드, 2초코드, 3초걸리는 코드 동시에 실행해준다.
async/await는 실용성이 매우좋다.
then에서 받는 value는 전에서 return된 값이다. 문자열이든 뭐든
let promise = new Promise((resolve, reject) => {
resolve("성공");
});
promise.then(value => { // value는 resolve()사이에 있는 "성공"이
console.log(value);
// "성공"
})
=> resolve : 이행, then으로 결과값을 받을 수 있다., reject: 실패
성공 / 실패했을때 실행되는 콜백함수
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
// reject 함수는 .then의 두 번째 함수를 실행합니다.
promise.then(
result => alert(result), // 실행되지 않음
error => alert(error) // 1초 후 "Error: 에러 발생!"을 출력, reject여서 두번째인자가 발동
);
</script>
let promise = new Promise(function (resolve, reject) {
resolve('성공');
// reject("실패");
});
promise
.then((value) => {
console.log(value);
return '성공';
})
.then((value) => {
console.log(value);
return '성공';
})
.then((value) => {
console.log(value);
return '성공';
})
.catch((error) => {
console.log(error);
return '실패';
})
.finally(() => {
console.log('성공이든 실패든 작동!');
});
async function funcDeclarations() {
await 작성하고자 하는 코드
...
}
const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다
// 이제 fs.readFile 메서드 등을 사용할 수 있습니다!