2016-09-09 9 views
1

誰でもこの関数の結果としてこのxmlを返す方法について私を助けることができますか?NodeJS PromiseからXMLを返すには?

この関数を呼び出すときはいつでも変数xmlAssinadoが返される必要があります。

module.exports = { AssinarXML: function(xml, arquivo, data){ 
certificado.GerarPEM() 
.then(function(pem){ 
    if (pem !== 500){ 
    const transforms = [ 
     'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 
     'http://www.w3.org/TR/2001/REC-xml-c14n-20010315' 
    ]; 
    const infoProvider = (pem) => { 
     return { 
     getKeyInfo() { 
      const cert = this.getCert(); 
      return `<X509Data><X509Certificate>${cert}</X509Certificate></X509Data>`; 
     }, 
     getCert() { 
      const certLines = pem.certificate.split('\n'); 
      return certLines.filter((e, i) => i && e && e.indexOf('-----') !== 0).join(''); 
     } 
     }; 
    }; 

    var signer = new SignedXml(); 
    signer.addReference(`//*[local-name(.)=\'infNFe\']`, transforms); 
    signer.signingKey = new Buffer(pem.key); 
    signer.canonicalizationAlgorithm = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'; 
    signer.keyInfoProvider = infoProvider(pem); 
    signer.computeSignature(xml); 
    **var xmlAssinado = signer.getSignedXml();** 

    fs.writeFile(arquivo + '.xml', xmlAssinado, function(err) { 
     if(err) { 
     console.error("Ocorreu um erro na gravação do arquivo: %s", err); 
     } 
     else { 
     console.log("XML Gerado e Assinado Com Sucesso!"); 
     } 
    }); 
    } else { 
    console.error("Ocorreu na assinatura do arquivo"); 
    } 
})}} 

これを達成するにはどうすればよいですか?

答えて

0

戻るあなたの方法から約束の発信者は、ここにreturnを追加することによって、その約束チェーンへのアクセスを得ることができるように:

return certificado.GerarPEM()... 

をそして、その後であなたの.then()、ハンドラの最後でxmlAssinadoを返す:

return xmlAssinado; 

これは、xmlAssinadoの値をあなたの約束の解決された値にします。その後、希望解決された値にこのような何かを得るために返された約束で.then()ハンドラを使用することができます。

myModule.AssinarXML(...).then(function(xmlAssinado) { 
    // you can use the value here 
}); 

fs.writeFile()が解決する前に終了するのを上記を行うと、待機しません(つまり、独自のペースで継続されます) 。それが完了するまで待つ必要がある場合は、writeFile操作を約束し、それをプロミス・チェーンにも連結して、それが完了したときにのみ解決できるようにする必要があります。

関連する問題