promise 생성자 실행기 함수 내에서 promise를 효과적으로 사용하고 있으므로 Promise 생성자 anti-pattern 입니다.
코드는 모든 오류를 안전하게 전파하지 않는 주요 위험의 좋은 예입니다. 거기에 이유 읽기 .
또한 async
/ await
를 사용하면 동일한 함정을 훨씬 더 놀랍게 만들 수 있습니다. 비교:
let p = new Promise(resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
순진한 (잘못된) async
동등 물 :
let p = new Promise(async resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
브라우저의 웹 콘솔에서 마지막 콘솔을 찾으십시오.
첫 번째 는 Promise 생성자 실행기 함수의 즉각적인 예외가 새로 생성 된 promise를 편리하게 거부 하기 때문에 작동 합니다..then
사용자가 직접 수행).
두 번째는 async
함수의 즉각적인 예외 가 함수 자체에서 반환 한 암시 적 약속을 거부 하기 때문에 작동하지 않습니다.async
입니다.
프라 미스 생성자 실행 함수의 반환 값이 사용되지 않았기 때문에 그것은 나쁜 소식입니다!
귀하의 코드
다음 myFunction
과 같이 정의 할 수없는 이유는 없습니다 async
.
async function myFunction() {
let array = await getAsyncArray();
return new Promise((resolve, reject) => {
eachLimit(array, 500, (item, callback) => {
}, error => {
if (error) return reject(error);
});
});
}
왜 오래된 동시성 제어 라이브러리를 사용 await
합니까?