"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Javascript Promise에 대한 재미있는 사실

Javascript Promise에 대한 재미있는 사실

2024-11-09에 게시됨
검색:950

fun facts about Javascript Promises

약속은 항상 비동기적입니다.

Promise의 콜백은 항상 동기 코드 다음에 실행됩니다.


const promise = Promise.resolve(); 
promise.then(() => console.log('async')); 
console.log('sync');

//sync
//async



연결된 약속은 새로운 약속을 반환합니다.

Promise는 호출될 때마다 새로운 Promise를 반환합니다.


const p = Promise.resolve(); 
const chain = p.then(() => {}); 
console.log(p === chain); //false



그럼 영원히()

약속은 무한 연결을 지원합니다


Promise.resolve(1) 
    .then(value => value   1) 
    .then(value => value   1) 
    .then(value => console.log(value)); // 3



콜백을 약속으로 변환할 수 있습니다.

현대적인 async/await와 함께 작동하도록 약속에서 콜백을 사용하는 이전 코드를 래핑할 수 있습니다.


function asyncOperation(callback) { 
    setTimeout(() => callback(null, 'Im a callback'), 1000); 
} 

const promisified = () => new Promise((resolve, reject) => { 
    asyncOperation((err, result) => { 
        if (err) reject(err); 
        else resolve(result); 
    }); 
});

promisified().then(result => console.log(result)); // "Im a callback"



Promise.resolve()가 항상 새로운 Promise를 생성하지는 않습니다.

비Promise 값을 전달하면 Promise.resolve()는 이를 해결된 Promise로 래핑합니다. 하지만 약속을 전달하면 동일한 약속이 반환됩니다.


const p1 = Promise.resolve('Hello'); 
const p2 = Promise.resolve(p1); 
console.log(p1 === p2); // true



체인 어디에서나 오류를 처리할 수 있습니다.


Promise.reject('Error!')
  .then(() => console.log('This will not run'))
  .then(() => console.log('This will also not run'))
  .catch(err => console.log('Caught:', err))
  .then(() => console.log('This will run'));



finally()는 값을 전달하지 않습니다.

finally() 메서드는 확인된 값을 수신하거나 수정하지 않습니다. 리소스를 정리하는 데 사용되며 Promise가 해결되거나 거부되는지 여부에 관계없이 실행됩니다.


Promise.resolve('resolved')
  .then(value => console.log(value))
  .finally(() => console.log('Cleanup'))

//resolved
//cleanup



한번 확정된 약속은 변경할 수 없습니다.

Promise가 확정되면(해결 또는 거부) 해당 상태는 변경할 수 없습니다. 이후에는 다시 해결/거부를 시도하더라도 변경할 수 없습니다.


const p = new Promise((resolve, reject) => {
  resolve('First');
  resolve('Second');
});
p.then(value => console.log(value));  //"First" (only the first value is used)



특정 오류를 처리하기 위해 catch()를 연결할 수 있습니다.


Promise.reject('type C error')
  .catch(err => {
    if (err === 'type A error') console.log('handle type A');
    throw err;
  })
  .catch(err => {
    if (err === 'type B error') console.log('handle type B');
    throw err;
  })
  .catch(err => {
    if (err === 'type C error') console.log('handle type C');
    throw err;
  })



약속이 아닌 값으로 대기를 사용할 수 있습니다


async function demo() {
  const result = await 42; //not a promise
  console.log(result);      
}
demo(); //42


그렇습니다! 여기까지 읽어주셔서 감사합니다. 다음 시간까지!

릴리스 선언문 이 글은 https://dev.to/theteabagcoder/10-fun-facts-about-javascript-promises-3jle?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3