2016-05-24 3 views
0

これで私に同行してください。私は、FindOne関数の外部で変数を更新する方法を頭の中で捉えることはできません。関数外の変数にアクセスするには

ので:

var userPostCount; 

    userPostsModel.findOne({'profileID':req.session.id}, function(err, usersPostCountDB) { 
     if(usersPostCountDB){ 
      userPostCount = req.body.postsCount + 1; 
     } else { 
      console.log('There was an error getting the postsCount'); 
     } 
    }); 

私はそれはスコープチェーン内の次のレベルアップだとしてuserPostCount変数を見つけることができるはずと思いました。

どのように私はそれにアクセスすることができるアイデアですか?私は後で他のマングースの活動のために使用するので、関数の外に変数が必要です。

userPostCountが定義されていません。

ありがとうございました!

PS:私はSOの他の質問を見回しましたが、他の回答の解決策は私にとってはうまくいかないようです。

Shayan

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-非同期呼び出し) – idbehold

答えて

4

callbacksを使用してください。

function getPostsCount(callback) { 
    userPostsModel.findOne({'profileID':req.session.id}, function(err, usersPostCountDB) { 
     if(usersPostCountDB) { 
      callback(null, req.body.postsCount + 1); 
     } else { 
      console.log('There was an error getting the postsCount'); 
      callback(true, null); 
     } 
    }); 
} 

そして外部からはコールバック関数を引数として渡すことで呼び出します。そのコールバック関数は、右getPostsCount()リターン(終了)後に実行されます。..

getPostsCount(function(error, postsCount) { 
    if (!error) { 
     console.log('posts count: ', postsCount); 
    } 
}); 
+0

ありがとうございました!私は今これを試しています。あなたの答えはまだ受け入れられているとは言えませんが、あなたの投稿を続けるつもりです。乾杯の花束 –

+0

それは働いた!どうもありがとう! –

+0

クール...乾杯! – narainsagar

1

あなたは、コールバック関数から値を返すようにしようとしています。コールバック関数の中で結果を使用しようとする方が簡単です。

もう1つのことは、関数を定義してその値を使用できるコールバックを与えることです。

function foo(fn){ 
    userPostsModel.findOne({'profileID':req.session.id}, function(err, usersPostCountDB) { 
    if(usersPostCountDB){ 
     userPostCount = req.body.postsCount + 1; 
     fn(userPostCount); 
    } else { 
     console.log('There was an error getting the postsCount'); 
    } 
}); 
} 
foo(function(userPostCount){ 
    alert(userPostCount); 
}) 

jqueryを使用している場合は、遅延オブジェクトを使用できます。 http://api.jquery.com/category/deferred-object/

+0

ありがとうございました。私はいくつかの他の問題に遭遇したので、一度これを更新すると:) –

関連する問題