2016-12-08 10 views
0

これは正常かどうかわかりませんが、のコールバック内の変数(Couchbaseコールバック)にアクセスしようとすると正しく動作しません。ノードjsを使用しているときにcouchbaseコールバック内の変数を変更できません

var obj = new Object(); 
    bucket.get(key, function(error, count) { 
    bucket.get(key2, function(error, prop) { 
     obj.entry = prop.value.value; 
     obj[entry+"_date"] = new Date(prop.value.created_at).toString(); 
    }) 
    }) 

何か不足していますか?

また、後でアクセスするため、コールバック内にObject varを宣言できません。

+0

正確には正しく動作しません。 –

+0

コールバック内のobj変数にアクセスできません。 –

+0

しかし、あなたはエラーが発生しますか?それとも、小道具が設置されていないことだけですか? –

答えて

1

[OK]を、私はこれをしようとするだろう:

var obj = {}; 
    bucket.get(key, function(error, count) { 
    bucket.get(key2, function(error, prop) { 
     obj[entry] = prop.value.value; 
     var extraKey = entry+"_date"; // ensure this is an string 
     obj[extraKey] = new Date(prop.value.created_at).toString(); 
     console.log(obj); 
     // obj[entry] exists here 
    }) 
    }) 

// but obj would be empty here :(

はまた、コールバックが持っているという理由だけで、あなたはコールバックのコンテキスト後OBJを使用している場合、実際にあなたがプロパティセットを持っていない可能性がありますのでご注意くださいまだ実行されていません。コールバックは非同期です。そのobj新しい小道具で何をしたいのかは、それらが設定されている場所と同じ状況で起こるはずです。もう1つの方法は、このコードをpromisesでリファクタリングすることです。これにより、実行順序を変更することができます。

+0

私は '約束'を試してみます。あなたは答えてくれてありがとう。 –

+0

問題ではありません...ブルーバードまたはqをチェックしてください。私は少し理解しやすいqを見つけた:) –

関連する問題