我编写了一段代码,对于给定的用户数组的每个条目,应调用修改此类用户的函数并发送有关其成员资格到期的电子邮件。
奇怪的行为(我很确定我得到了范围如何工作)是两个:
如果我没有将users[i]
分配给foo
,则行ldapclient.modify(users[i].dn, change, function(err) {
确实知道users[i]
是什么,但功能没有(“错误,无法读取未定义的属性'cn'“
如果我指定foo,该函数运行正常 - 但是,sendMail的结果总是相同的(如果我有4个不同的用户,将有4个发送的电子邮件相同并发送到一个用户)
这是代码段
for ( var i = 0; i < users.length; ++i ){
var foo = users[i];
ldapclient.modify(foo.dn, change, function(err) {
log.info({change: change, err: err}, 'Modifying Membership');
assert.ifError(err);
//send mail accordingly
var mailmessage = {
to: foo.cn+" <"+foo.mail+">",
subject: "Your membership has expired",
text: "Hi "+foo.cn+", \n your membership for the body " + foo.body + " \
has been suspended after automatic expiration"
};
mail.sendMail(mailmessage);
}
我非常肯定已经理解了匿名函数的范围和魔力,异步函数,回调函数以及使节点变得“酷”的任何东西,但这(主要是我的观点2)只是破坏了我的所有信念。