2つのノードサービス呼び出しがあります。1つはLDAPグループからグループメンバーを取得するためのもので、もう1つは各メンバーの詳細を取得するためのものです。各呼び出しはコールバックで非ブロッキングであるため、私が使用しているレコードが個人に対して取得された詳細と一致しない場合があります。
競合状態を防ぐためにこれをコーディングする賢い方法はありますか?動作する場合もありますが、以下のコンソールログを実行している行では、反復しているレコードが、従業員の詳細を取得するためにストアから返されたレコードと一致しないことがよくあります。コードを見てみましょう。
onGroupSelected: function (list, idx, el, record) {
var store = Ext.getStore('GroupMembers');
store.getProxy().setUrl('http://people-nodejs.xxx.xxx.com/ldap/group/' + record.get('cn'));
var that = this;
store.load({
callback: function (records, operation) {
var empstore = Ext.getStore('EmployeeDetails');
Ext.each(records, function(rec, ndx) {
console.log(ndx + ":" + rec.get('memberUid'));
if (rec.get('isMember')) {
empstore.getProxy().setUrl('http://people-nodejs.xxx.xxx.com/ldap/user/' + rec.get('memberUid'));
empstore.load({
callback: function(emps, op) {
console.log(ndx + ":" + rec.get('memberUid') + "--" + emps[0].get('fullName'));
rec.set('workforceID', emps[0].get('workforceID'));
rec.set('fullName', emps[0].get('fullName'));
that.getGroupMembersList().setRecord(rec);
}
});
}
});
// Remove empty records and populate with records from above
store.removeAll();
}
});