2017-11-30 1 views
0

odata metadata.xml 파일을 json으로 변환하기 위해 'akorchev/odata2openapi'모듈을 사용하려고합니다. 설명서에 따라 다음 코드를 구현했습니다.oData 파싱에 대한 약속 문제

const o2oapi = require('odata2openapi'); 

function_B (content) { 
    o2oapi.parse(content) 
    .then(entitySets => convert(entitySets)) 
    .then(swagger => console.log(JSON.stringify(swagger, null, 2))) 
    .catch(error => console.error(error)); 
} 

콘텐츠 변수는 콘솔에 표시 할 수있는 메타 데이터 XML 스트림입니다. 함수 B의 구문 분석 방법에 로그인 할 때 나는 또한 다음과 같은 결과를 볼 수 있습니다 불행히도

Promise { 
{ entitySets: [ [Object], [Object] ], 
    version: '1.0', 
    complexTypes: [], 
    singletons: [], 
    actions: [], 
    functions: [], 
    defaultNamespace: 'ZEXAMPLE_SRV', 
    entityTypes: [ [Object], [Object] ] } } 

을, 나는 또 다른 기능 C.

function_A (content, x, y, z){ 
    function_C (function_B (content), x, y ,z); 
} 
에 전달할 '자신감에서'최종 결과를 얻을 수 아니다

나는 성공없이 내 코드를 적응 시키려고 노력했다. 너는 조언을 해줄 수 있니?

+1

'convert'은 무엇입니까? 'parse'에 의해 출력되는'entitySets' 속성의 내용을 기대합니까? 왜냐하면 당신은 그 객체 전체가 아니라 그 속성을 전달하고 있기 때문입니다. 'then' 함수 안에서 콘솔로 로그 아웃하고 무슨 일이 일어나는지 볼 수 있습니다. –

답변

1

마지막으로 여러 변경 사항으로 문제를 해결할 수있었습니다. @ ethan-jewett에 의해 제안 된 것처럼 입력이 잘못되었다는 것을 알기 위해 convert 메소드를 디버깅해야했습니다. 또한 @moshimoshi가 제안한 것처럼 비동기 함수를 캐스케이드해야했습니다. 여기

, 기능 B의 최종 코드 구현 :

function_B(content) { 
    return new Promise(function (resolve, reject) { 

     const options = { 
      host: '', 
      path: '' 
     }; 

     parse(content) 
      .then(entitySets => convert(entitySets.entitySets, options)) 
      .then(function(swagger) { 
       var result = JSON.stringify(swagger, null, 2); 
       resolve(result); 
      })  
      .catch(error => { 
       reject(error); 
      }); 
    });   
} 

기능 A의 경우 :

function_A (content, x, y, z){ 
    function_B (content).then(result => function_C (result , x, y ,z)); 
}