2016-07-15 7 views
0

はこの流星クライアントコードはTracker.autorunは一度実行するにしようとするが、それはreactivenessの設定と一回に一回、二回実行しなければならないことのように見えるよう。
これはいいですが、3回発射しています。設定のために1回、反応のために2回、サーバーはuser.profile.abcを1回更新したにもかかわらず反応しました。それをテストする流星トラッカーオートラン火災2回

、私はMongoDBのコンソールでこのコードを実行すると、添付iamgeは、私はそれが二回発射が確認され得たものです。

は、どのように私はそれがユーザーのコレクションの変化に対応するために、一度だけ実行するように得ることができますか?おかげ

db.users.update({_id: Meteor.userId()},{$set: {'profile.ABC': ['a','b']}}).pretty() 

enter image description here

//client 
Meteor.call('cleanABC', (err) => { 
    if (!err) { 
    ABCListener(); 
    } 
}); 

ABCListener:() => { 
    Tracker.autorun(() => { 
    if (Meteor.userId()) { 
     console.log('auto run invoked'); 
     if (Meteor.user().profile.ABC) { 
     const myArray = Meteor.user().profile.ABC; 
     //myFunction(myArray); 
     console.log('condition true'); 
     } else { 
     console.log('condition false'); 
     } 
    } 
    }); 
} 

//server 
'cleanABC': function() { 
    return Meteor.users.update({ 
    _id: Meteor.userId() 
    }, { 
    $unset: { 
     'profile.ABC': '' 
    } 
    }); 
} 

//and some where else in the code 
    Meteor.users.update({ 
    _id: userId 
}, { 
    $set: { 
    'profile.ABC': myArray 
    } 
}, (err) => { 
    if (!err) { 
    console.log('just sent the array'); 
    } 
}); 
+0

流星のユーザーは、反応性です。これにはTracker.autorunが必要ですか? – vijayst

+0

@Vijayすぐに 'profile.ABC'を使うだけです。ハム、私はどのように考える必要があります。 –

+0

はい。更新情報がminimongoに即座に適用されることを覚えておいてください。次に、いくつかの待ち時間で、同じコードがサーバー上で実行されます。 minimongoとMongoの間に相違がある場合、minimongoは更新と同期されます。トラッカーは、サーバープッシュからのプロファイルへの更新がある場合に呼び出されることもあります。私は 'Tracker.autorun'出て右のボックスからそれを使用するときに – vijayst

答えて

1

は、私はこの問題は、あなたがちょうどあなたがメソッドを呼び出すTracker.autorun毎回を呼び出しているということだと思います。

//client 
    ABCListener:() => { 
    Tracker.autorun(() => { 
    if (Meteor.userId()) { 
     console.log('auto run invoked'); 
     if (Meteor.user().profile.ABC) { 
     const myArray = Meteor.user().profile.ABC; 
     //myFunction(myArray); 
     console.log('condition true'); 
     } else { 
     console.log('condition false'); 
     } 
    } 
    }); 
} 
Meteor.call('cleanABC'); 

それが動作するはずです:

私はあなたがあなたのクライアントコードを変更した場合を考えます。

+0

よく見て! 'Tracker.autorun'は働くには手間のかかる獣です。私はそれが、MDGがAPIドキュメントからそれを削除し、もはや公開されていないといううわさがあった理由だと思います。私は何かのためにそれを使用しなければならないたびに、私はそれがどのように動作し、ちょうど私がそれよりも賢明な誰かの方法を知っているという事実を受け入れることをやめなければならなかった。 – CodeChimp

+0

よく見ています! 'Tracker.autorun'は働くには手間のかかる獣です。私はそれが、MDGがAPIドキュメントからそれを削除し、もはや公開されていないといううわさがあった理由だと思います。私は何かのためにそれを使用しなければならないたびに、私はそれがどのように動作し、ちょうど私がそれよりも賢明な誰かの方法を知っているという事実を受け入れることをやめなければならなかった。 – CodeChimp