node.js 환경에서 Bluebird 약속을 사용하여 파일의 가능한 3 가지 변형이 있는지 확인합니다 (image.png/image.gif/image .jpg) 내 서버에. 이 세 파일 중 하나가 있으면 그 파일은 사용자에게 반환됩니다. 세 파일 중 하나라도 존재하지 않으면 기본 이미지가 반환됩니다. 지금까지,이 코드를 내놓았다 :Node.js Bluebird 약속 : promise.any가 기본 이미지를 반환합니다.
var promise1 = new Promise(function(resolve, reject) {
fs.statAsync('./image.jpg')
.then(function(result) {
if(result){
resolve('jpg');
}
}).catch(function(err){
//foo
});
});
var promise2 = new Promise(function(resolve, reject) {
fs.statAsync('./image.gif')
.then(function(result) {
if(result){
resolve('gif');
}
})
.catch(function(err){
//foo
});
});
var promise3 = new Promise(function(resolve, reject) {
fs.statAsync('./image.png')
.then(function(result) {
if(result){
resolve('png');
}
})
.catch(function(err){
//foo
});
});
Promise.any([
promise1,
promise2,
promise3
]).then(function(result) {
res.sendfile("./image."+result);
}).catch(function(err){
res.sendfile("./default.png");
});
문제는 다음과 같습니다만큼 그 세 파일 중 하나가 존재하는 한, 모든 것이 잘 작동합니다. 그러나 세 파일 중 어느 것도 찾을 수없는 경우에 대비하여 반환 할 기본 이미지를 유지하도록 할 수는 없습니다.
이미지가없는 경우 각 약속에'reject'를 사용해야합니다. –
'fs.statAsync()'가 이미 반환 한 것을 사용할 수있을 때이 새로운 약속을 만드는 것은 안티 패턴입니다. '.then()'핸들러에서 결과를 평가하고 원하는 경우 해결 된 상태를 변경할 수 있습니다. 이것들을 새로운 약속으로 포장 할 필요가 없습니다. 사실, 여러 가지 버그는 불필요하고 실수하기 쉬운이 약속 포장으로 인해 발생합니다. – jfriend00