2017-02-16 7 views
0

を完了するまで、私は2つの機能があります。待ちfs.readFileSyncが私のファイルfunctions.jsで

var email, url1 

function getFile(_callback){ 
    email = fs.readFileSync("C:/Emails/" + items[2]) 
    _callback(email);  
} 

function getUrl(){ 
    getLatestMail(function(email) { 
      email.split(/\n/).forEach(function(line) { 
      i++; 
      if (i == 52) { 
       var test = new Buffer(line, 'base64').toString(); 
       var regex = /=(.+?)"/g 
       var result1 = regex.exec(test); 
       url1 = result1[1].toString(); 
       console.log(url1); 

     } 

    }); 

getUrl() 
exports.resetUrl = url1; 

を、私はファイルを持っているが

var Functions = require('../pageobjects/functions.js'); 
var test = Functions.resetUrl; 
console.log(test); 

をtest.jsしかし、それは常にundefinedを返します! getUrl()のconsole.logは良い値を示しています。それは、関数getURlがロードされるまで、エクスポートが待機していないようです。これを解決する最善の方法は何ですか?この例では、不要なコード部分をすべて削除しました。

+0

正しいですが、 'readFileSync'は非同期です。あなたはそれを回避することができますし、 'getFile'を呼び出すコードを投稿していないので、あなたはそれをどうやって行うのか分からず、代わりに同期' readFile'を使うこともできます。 – adeneo

+0

'readFileSync'の代わりに' readFile'を使うかもしれません:http://stackoverflow.com/a/22863818/6429774 – Phil

+1

'functions.js'に' resetUrl'変数を定義する必要があります。 –

答えて

0

私は、getUrlメソッドが非同期操作を実行し、そうurl1が設定される前に、あなたがexports.resetUrl = url1を行うので、あなたは別のアプローチを試みなければならないfunctions.jsの輸出がexports.resetUrl = url1

EDIT

でなければならないことだと思います常に定義されません。

は、私はあなたが行うことができurl1値次に

function getUrl(callback){ 
    getLatestMail(function(email) { 
     email.split(/\n/).forEach(function(line) { 
     i++; 
     if (i == 52) { 
      var test = new Buffer(line, 'base64').toString(); 
      var regex = /=(.+?)"/g 
      var result1 = regex.exec(test); 
      url1 = result1[1].toString(); 
      console.log(url1); 
      // and here use the callback 
      callback(url1); 
     } 
    }); 
}); 

exports.resetUrl = getUrl; 

へのアクセスを得るためにtest.jsファイルで使用することができますいくつかのcallbackパラメータgetUrlに機能を追加することをお勧めでtest.js

var Functions = require('../pageobjects/functions.js'); 
Functions.resetUrl(function(url1){ 
    console.log(url1); 
}); 

これは私の頭に最初に来た唯一のオプションです。私はあなたがポイントを得て、なぜあなたの場合のurl1が常に定義されていなかったのかを理解することを願っています。

+0

'exports'の直前に' console.log(url1) 'を追加して、それが何を出力するかを教えてください。 – piotrbienias

+0

はいgetUrl関数のconsole.logが正しい値を返します。エクスポート前のconsole.logは未定義を返します。 – Janp95

+0

私は答えを更新し、それを調べて何とか役立つかどうかを教えてください – piotrbienias

関連する問題