Async: λŒ€κΈ°μ—΄ μž‘μ—…μžκ°€ 였λ₯˜λ₯Ό 던질 λ•Œ λŒ€κΈ° κ°€λŠ₯ν•œ q.pushκ°€ ν•΄κ²°λ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2019λ…„ 06μ›” 06일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: caolan/async

await q.push(task) λŠ” λŒ€κΈ°μ—΄ μž‘μ—…μžκ°€ 였λ₯˜λ₯Ό 던질 경우 q.push λ°˜ν™˜λœ 약속이 ν™•μΈλ˜κ±°λ‚˜ κ±°λΆ€λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν˜„μž¬ μ‚¬μš©ν•˜κΈ°μ— μ•ˆμ „ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 λ©”μ„œλ“œμ™€ 선택적 콜백 λ§€κ°œλ³€μˆ˜(ν‘Έμ‹œ 및 μžŠμ–΄λ²„λ¦¬κΈ° κΈ°λŠ₯)의 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μœΌλ‘œ 인해 await q.push(task) μ—μ„œ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μ—†μŒμ„ μ΄ν•΄ν•©λ‹ˆλ‹€. 약속을 κ±°λΆ€ν•˜λŠ” q.asyncPush(task) λ©”μ„œλ“œλŠ” μ‹€ν˜„ κ°€λŠ₯ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆκΉŒ?

이 μ½”λ“œμ˜ 문제λ₯Ό ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€(μš”κ΅¬ 없이 λ…Έλ“œ λ˜λŠ” λΈŒλΌμš°μ €μ—μ„œ).

const async = require('async');
let pushResult;

(async () => {
    const q = async.queue(async (task) => {
        throw new Error('Bad thing');
    });

    try {
        pushResult = q.push({some: 'data'});
        await pushResult;
        console.log('Error not catched');
    } catch (e) {
        console.log('Error catched');
    }
})();

setTimeout(() => {
    console.log('exit');
    console.log(pushResult);
}, 1000);

_Originally에 @darksabrefr에 μ˜ν•΄ κ²Œμ‹œ https://github.com/caolan/async/pull/1641#issuecomment -498191809_

bug feedback-wanted

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

asyncPush 아이디어가 λ§ˆμŒμ— λ“­λ‹ˆλ‹€.

λͺ¨λ“  6 λŒ“κΈ€

q.push() 였λ₯˜ 개체둜 ν•΄κ²°ν•˜λŠ” 것을 κ³ λ €ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·Έκ²ƒμœΌλ‘œ μΆ©λΆ„ν• κΉŒμš”? λ‚˜λŠ” λŒ€λ‹€μˆ˜μ˜ queue μ‚¬μš©μžμ—κ²Œ unhandledRejection λ₯Ό μ œκ³΅ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.

였λ₯˜λ‘œ ν•΄κ²°ν•˜λŠ” 것이 μ˜΅μ…˜μΌ 수 μžˆμ§€λ§Œ q.push λ°˜ν™˜μ„ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œλŠ” μ•½μ†λœ κΈ°μ‘΄ νŒ¨ν„΄μ΄ μ•„λ‹™λ‹ˆλ‹€( try / catch / finally 블둝 λ˜λŠ” .then() / .catch() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 있음). 직접 κ±°λΆ€λŠ” 선택 사항이 μ•„λ‹™λ‹ˆλ‹€. λ™μ˜ν•©λ‹ˆλ‹€. μ£Όμš” μˆ˜μ • μ‚¬ν•­μž…λ‹ˆλ‹€. μ €μ—κ²ŒλŠ” 두 가지 λ‹€λ₯Έ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

  • κ±°λΆ€ν•  수 μžˆλŠ” 약속을 λ°˜ν™˜ν•˜λŠ” κ³ μœ ν•œ q.asyncPush λ©”μ„œλ“œμž…λ‹ˆλ‹€. ν”„λΌλ―ΈμŠ€μ™€ 콜백 APIκ°€ μ™„μ „νžˆ 뢄리될 수 있기 λ•Œλ¬Έμ— μ•„λ§ˆλ„ κ°€μž₯ 쉽고 λͺ…ν™•ν•œ 방법일 κ²ƒμž…λ‹ˆλ‹€.
  • λΆ€μšΈμ„ q.push 의 두 번째 λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•˜μ—¬ 약속 κ±°λΆ€λ₯Ό ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

정말 μ€‘μš”ν•œ 것은 약속이 μ˜μ›νžˆ 보λ₯˜λ˜μ§€ μ•ŠμœΌλ―€λ‘œ μƒκ°ν•˜λŠ” μ΅œμƒμ˜ μ˜΅μ…˜μ„ 선택할 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ ;-)

asyncPush 아이디어가 λ§ˆμŒμ— λ“­λ‹ˆλ‹€.

정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

@aearly 이것이 κ΅¬ν˜„λœ 적이 μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰