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 값을 전달하면 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() 메서드는 확인된 값을 수신하거나 수정하지 않습니다. 리소스를 정리하는 데 사용되며 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)
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
그렇습니다! 여기까지 읽어주셔서 감사합니다. 다음 시간까지!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3