2017-07-28 6 views
1

なぜ「describeDir」という約束ができないのかを理解することができません。誰でも私がここで何をしぼったのか考えていますか?すべてのコードが実行されているようですが、そのときのような約束のAPI関数は決して実行されません。トップレベルの関数の2つを以下に示します。 GitHubのレポは、その後、私はここに関数を呼び出すhttps://github.com/PhoenixContactUSA/pcworx-doc-genプロミスチェーンができない

function updateDescriptor(fileloc, wsName, outdir){ 
    console.log('Updating descriptor file for: ' + wsName); 
    return new Promise(function(resolve, reject){ 
    return getDescriptor(outdir).then(
     (value) => { 
     let descriptorFile = value; 

     var comments = getComments(fileloc); 
     var variables = getVariables(fileloc); 

     //wait until both are completed before continuing 
     return Promise.all([comments, variables]).then((values) => { 
      //var descriptor = new Object(); 
      //console.log(JSON.stringify(descriptor)); 
      descriptorFile[wsName] = new Object(); 
      //console.log(JSON.stringify(descriptor)); 

      //var worksheet = new Object(); 
      descriptorFile[wsName].comments = values[0]; 
      descriptorFile[wsName].variables = values[1]; 

      //save the file 
      return saveDescriptor(descriptorFile, outdir).then((value) => { 
      console.log('Completed ' + wsName + ' ' + value); 
      resolve(value); 
      }, (reason) => {console.log(reason)}) 

     }, (reason) => { 
      console.log(reason); 
     } 

     ) 


     }, 
     (reason) => {console.log(reason)} 
    ) 



    }) 



} 


function describeDir(filedir, outdir){ 

    var files = findFilesInDir(filedir, '.XML'); 
    for (var k=0;k<files.length;k++){ 
    if ((files[k].indexOf('@HW') !== -1) || (files[k].indexOf('@LIBS') !== -1) || (files[k].indexOf('@ROOT') !== -1) || (files[k].indexOf('run') !== -1)) { 
     files.splice(k,1); 
    } 
    } 

    return Promise.each(files, function(file){ 
     return updateDescriptor(file, path.basename(file), outdir); 
    }); 

} 

に位置しています。コードは正常に実行されるようですが、then()は決して呼び出されません。私はこの最新のリビジョンでブルーバードを使用しています。拒否があるかどう

//generate the output files, then copy them to the destination 
    docProcessor.describeDir(folder, path.join(__dirname, '..')).then((value)=>{ 
     console.log('docProcessor then entered: ' + value); 
    }); 
+0

であるあなたは、またはあなたが約束チェーンthen' 'にしようとされている行を示してもらえますか? – TheHansinator

+0

エラーが生じますか? –

+0

エラーはありません..それはノードベースであり、問​​題の半分は私が現在どのデバッグ情報も取得していないことです。 – zmink1

答えて

1

まず、チェックするために、しようと

docProcessor.describeDir(folder, path.join(__dirname, '..')) 
.then(value => console.log('docProcessor then entered:', value)) 
.catch(reason => console.error('error', reason); 

describeDirにおける潜在的な問題は、あなたが名前に@HW@LIBS@ROOTまたはrunでファイルをフィルタリングするために使用するループがある

ファイルアレイをkにスプライスすると、k++がまだ実行されるため、次のファイルのテストをスキップします

すなわち

array = [a, b, c, d]; 
k == 1 // testing "b" 
array.splice(k, 1); 
now array = [a, c, d] 
k++; // == 2 
next iteration checks "d" 

これまでそれらのものの文字列のいずれかを持つ行に2つのファイルがある場合はそのため、あなたはそれを「削除」をスキップします - これは問題になるだろうか?

あなたが代わりにボーナスとして

function describeDir(filedir, outdir) { 
    var files = findFilesInDir(filedir, '.XML') 
    .filter(file => 
     file.indexOf('@HW') == -1 && 
     file.indexOf('@LIBS') == -1 && 
     file.indexOf('@ROOT') == -1 && 
     file.indexOf('run') == -1 
    ); 

    return Promise.each(files, file => updateDescriptor(file, path.basename(file), outdir)); 
} 

かすっきり

function describeDir(filedir, outdir) { 
    var files = findFilesInDir(filedir, '.XML') 
    .filter(file => !/@HW|@LIBS|@ROOT|run/.test(file)); 

    return Promise.each(files, file => updateDescriptor(file, path.basename(file), outdir)); 
} 

をフィルタを使用する場合は、次のupdateDescriptor機能クリーンアップと平らと最新のES2015 +コーディング機能を備えた近代化された(とあなたのコメントはそのままです)

function updateDescriptor(fileloc, wsName, outdir) { 
    console.log('Updating descriptor file for: ' + wsName); 
    return getDescriptor(outdir) 
    .then(value => Promise.all([getComments(fileloc), getVariables(fileloc), value])) 
    .then(([comments, variables, descriptorFile]) => { 
     //var descriptor = new Object(); 
     //console.log(JSON.stringify(descriptor)); 
     //console.log(JSON.stringify(descriptor)); 

     //descriptorFile[wsName] = new Object(); 

     //var worksheet = new Object(); 
     descriptorFile[wsName] = {comments, variables}; 
     //save the file 
     return saveDescriptor(descriptorFile, outdir) 
    }).then((value) => { 
     console.log('Completed ' + wsName + ' ' + value); 
     return value 
    }) 
} 

あなたはエラーがチェーン

ダウンupdateDescriptorの真のコンパクトバージョンを保持したいとcatchコードは、

const updateDescriptor = (fileloc, wsName, outdir) => getDescriptor(outdir) 
    .then(value => Promise.all([getComments(fileloc), getVariables(fileloc), value])) 
    .then(([comments, variables, descriptorFile]) => 
     saveDescriptor(Object.assign(descriptorFile, { 
      [wsName] : { comments, variables } 
     }), outdir) 
    ); 
+0

フィードバックのおかげで、これは私のコードの大きな改善です。それが信じられないと、コードがまだ実行されているにもかかわらず、describeDirが呼び出されたときに私はまだキャッチしたり実行したりしていません。おそらく、ノードが食べているコードのどこかに深いところにバグがありますか?より有用なものを投稿する前に調査を続けます – zmink1

関連する問題