【发布时间】:2012-12-18 17:59:21
【问题描述】:
我有两个节点服务调用:一个是从 LDAP 组中获取组成员,另一个是获取每个成员的详细信息。每次调用都不会阻塞回调,所以我遇到了一种情况,有时我正在使用的记录与为个人检索的详细信息不匹配。
有没有一种聪明的方法来编写代码来防止竞争条件?有时它可以工作,但通常在我在下面进行控制台日志的行上,我正在迭代的记录与从商店返回以获取员工详细信息的记录不匹配。下面看一下代码:
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();
}
});
【问题讨论】:
标签: javascript node.js asynchronous