2016-09-25 4 views
-2

内にネストされた変数を取得するにはどのように、私はこのコードを持っています。私はこれでしばらく壁に頭をぶつけていて、何が間違っているのか分かりません。私が知る限り、コードは非同期ではありません。 html値は、実際に別の関数で使用しているhtmlコードの文字列でなければなりません。別の関数ので

+0

1.直接質問に答えるために、あなたは2できません。あなたの特定の問題に答えるためには、非同期の関数があります。そのため、後で値が返されることはありません。 – vlaz

+0

はグローバルを宣言します。 '.on(" end ")'であなたのグローバルにhtmlの値を割り当てます。 'return html'を取り除く。この質問を削除してください。正確にそれのような他の多くの質問を読む – Tibrogargan

答えて

3

コールバックは、私がここでのコードで何を参照してくださいによると、非同期です:https://github.com/Osterjour/line-by-line/blob/master/line-by-line.js#L43-L45

setImmediate(function() { 
    self._initStream(); 
}); 

解析がイベントループ内の次の「目盛り」までは起動しません。一般に、ほとんどのコールバックは非同期的に行われると仮定するとよいでしょう。あなたはまた、非同期にあなた機能を変換することをお勧めします:

function readLineMemory(cb) { 
    let html = ''; 
    const loadFile = dialog.showOpenDialog({properties: ['openFile']}); 
    const lr = new LineByLineReader(loadFile[0]); 
    lr.on('error', err => { 
     cb(err); 
    }) 
    .on('line', function (line) { // called every line 
     const lineParse = JSON.parse(line); 
     JSONParsed.push(lineParse); 
     let htmlTabled = tableify(lineParse) + '<hr>'; 
     html = html + htmlTabled; 
    }) 
    .on('end', function() { // called when file is read fully 
     html = 'data:text/html,' + html; 
     cb(null, html); 
    }); 
} 

(またはIMOよりよい約束と):

function readLineMemory() { 
    return new Promise(function (resolve, reject) { 
    let html = ''; 
    const loadFile = dialog.showOpenDialog({properties: ['openFile']}); 
    const lr = new LineByLineReader(loadFile[0]); 
    lr.on('error', err => { 
     reject(err); 
     }) 
     .on('line', function (line) { // called every line 
     const lineParse = JSON.parse(line); 
     JSONParsed.push(lineParse); 
     let htmlTabled = tableify(lineParse) + '<hr>'; 
     html = html + htmlTabled; 
     }) 
     .on('end', function() { // called when file is read fully 
     html = 'data:text/html,' + html; 
     resolve(html); 
     }); 
    }); 
} 
+0

これは私の問題を本質的に解決しました!それは私を許可するときに受け入れます。 – willyb321

関連する問題