2017-11-20 26 views
0

私は可能なすべての解決策を試しています。 globalを使用するか、bindを使用しますが、グローバル変数にはアクセスできません。ここに私のコードはのnodejsに私の.jsファイルを生成しようとしています。ノード内のグローバル変数

module.exports = function (portal) { 
    var mongoose = require('mongoose'); 
    var News = mongoose.model('News'); 
    var urls =""; 
    var gensitemap = function(){ 
    urls = "abc"; 

    console.log(urls);// print abc as expected 
    News.find().exec(function (err, news) { 
     news.forEach(function (t) { 
     urls += "<url><loc>"+cdn_url+"/news"+t.slug+"</loc>"+"</url>"; 
     }); 
    }); 
    console.log(urls);// print still abc as not expected it should be change 
    } 
    var allUsers = portal.setupContext({}); 
    app.get('/gensitemap',allUsers ,gensitemap); 
    }; 

ここで私はその同じ出力を印刷しているURL beforとNews.find()後method.but代わりに変更のurl変数を使用して見ることができます。

私は既にglobalまたはasync.parallel({})を試していますが、News.find()で同じ問題が発生すると、その変数は別のものとして扱われます。

助けが必要ですか?

はUPDATE:

コメントと言及質問のいくつかを読んだ後、私はまた、私は変更を見ることができていますいくつかの時間を待った後に気づくこの

Events.find().exec(function (err1, events) { 
      events.forEach(function (t1) { 
       url += "<url><loc>"+cdn_url+"/event"+t1.slug+"</loc>"+changefreq+priority+"</url>"; 
      }); 
      News.find().exec(function (err2, news) { 
        news.forEach(function (t2) { 
         url += "<url><loc>"+cdn_url+"/news"+t2.slug+"</loc>"+changefreq+priority+"</url>"; 
        }); 
        var static_urls = ['about-us','categories','overview','media','contact-us','login','register','pages/en/faq']; 
          for(var i = 0 ;i < static_urls.length;i++){ 
           url += "<url><loc>"+"http://192.168.10.38:3000/"+static_urls[i]+"</loc>"+"<changefreq>weekly</changefreq>"+"<priority>1</priority>"+"</url>"; 
          } 
        console.log(url); 

//this url(variable) print only the changes i made in above for loop.. :-(
       }); 
     }); 

を試みるが、そうではありません同じ順序で。

+3

可能性のある重複した[非同期呼び出しからの応答を返すには?](https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-コール) – baao

+0

このリンクを参照してくださいとslove qution; https://stackoverflow.com/questions/10987444/how-to-use-global-variable-in-node-js –

+0

しかし、私の変数は同じファイルにあります。@DharmikUnagar –

答えて

1
module.exports = function (portal) { 
    var mongoose = require('mongoose'); 
    var News = mongoose.model('News'); 
    var urls =""; 
    var gensitemap = function(){ 
    urls = "abc"; 

    console.log(urls);// print abc as expected 
    News.find().exec(function (err, news) {//this block of code gets executed after the News.find().exec() function return . Anything you want to do after the exec function call get a response you have to do it here. inside this call back function. 

     news.forEach(function (t) { 
     urls += "<url><loc>"+cdn_url+"/news"+t.slug+"</loc>"+"</url>"; 
     }); 
     //if you log the url here you should find ur desired value 
     console.log(urls); 
    }); 
    //This is getting called before your News.find().exec() function returns any value. 
    console.log(urls);// print still abc as not expected it should be change 
    } 
    var allUsers = portal.setupContext({}); 
    app.get('/gensitemap',allUsers ,gensitemap); 
    }; 
+0

私は 'News.find()'コールバックで私は私の欲望を入れて同意するが、私は 'News.find()'のような3つの他の呼び出しがあると私は何をすると思いますか? –

+0

は、どのように使用するかによって異なります。これらのパッケージを見ることができます。 https://www.npmjs.com/package/asyncまたはhttp:// bluebirdjs。com/docs/getting-started.html –

+0

または古典的なES6 [Promise](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise) – Techniv

関連する問題