2016-08-30 8 views
2

임 다음 코드가있는이 코드는 지정된 함수 myFunc에 구현되었습니다. 모든 함수가 완료 될 때까지 기다리십시오. (myFunc) 즉, 파일이 성공적으로 추출되었을 때/아니요. 반환 이 오픈 소스부터 일부 상태 (성공/오류)이벤트 대신 약속 사용

var myFunc =() => { 

var DecompressZip = require('decompress-zip'); 
var unzipper = new DecompressZip(filename) 

unzipper.on('error', function (err) { 
    console.log('Caught an error'); 
}); 

unzipper.on('extract', function (log) { 
    console.log('Finished extracting'); 
}); 

unzipper.on('progress', function (fileIndex, fileCount) { 
    console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount); 
}); 

unzipper.extract({ 
    path: 'some/path', 
    filter: function (file) { 
     return file.type !== "SymbolicLink"; 
    } 
}); 

}; 

이가 (... 반환 상태를 확인하기 위해) 내 의도는 다음과 같은 promisify 또는 으로 약속을 변경하는 문제가 이벤트와 함께 일하고있다

var myFunc =() => { 

    return new Promise(function(resolve, reject) { 
    var DecompressZip = require('decompress-zip'); 
    var unzipper = new DecompressZip(filename) 

    unzipper.on('error', function (err) { 
     console.log('Caught an error'); 
     reject(); 
    }); 

    unzipper.on('extract', function (log) { 
     console.log('Finished extracting'); 
     resolve(); 
    }); 

    unzipper.on('progress', function (fileIndex, fileCount) { 
     console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount); 
    }); 

    unzipper.extract({ 
     path: 'some/path', 
     filter: function (file) { 
      return file.type !== "SymbolicLink"; 
     } 
    }); 

    }; 

내 질문은 : 나는 너무 JS의 전문가가 에 의미가 이벤트를 변환 할합니까 않을거야 때문에

  1. 을 약속?
  2. 유스 케이스에 사용할 수있는 다른 솔루션이 있습니까? ?

이 당신이 "종료"이벤트는 한 번만 실행됩니다 절대적으로 긍정적 인 경우에만 의미가 있습니다 약속에 이벤트를 변환 영업 https://github.com/bower/decompress-zip

+2

예, 발신자가 (단일) '추출'이벤트를 기다릴 수있게하려면 약속을 반환하는 것이 절대적인 의미를 갖습니다. – Bergi

+2

'reject()'에'err'을 넘겨 주어야합니다. – Bergi

+0

@Bergi OP가 코드의 소유자가 아닌 것으로 의심됩니다. 코드 검토에서 문제가 될 수 있습니다. – Mast

답변

1

입니다.

이 경우 네, 구현에 대해 제안하는 것이 작동해야합니다 (코드를 올바르게 이해한다고 가정).

1

1) 그렇습니다. 그러한 이벤트를 Promise로 변환하는 것이 좋습니다. 현재 서로 다른 라이브러리에는 이벤트 (메시지, 콜백 함수, 오류 콜백 함수, 예외, 오류 코드 등)를 표현하는 다양한 방법이 있습니다. 이제 약속은 Javascript 표준이되는 모든 것을 통합합니다. 그러므로 Promise 레이어를 사용하는 라이브러리에 두는 것이 좋습니다. 예전의 엉망이 아닌 코드에서만 약속을 사용하십시오.

2) 당신의 해결책은 나에게 잘 어울립니다.

관련 문제