我有一个在节点应用程序中运行的函数,由于我对如何正确编写异步代码缺乏了解,我无法开始工作。下面是一个接收带有电子邮件的配置文件的功能。我想遍历每封电子邮件并检查该用户是否存在于我的数据库中。如果他们这样做,我想返回给定的回调并完全存在该函数而不做任何其他事情。如果找不到用户,我想根据配置文件中提供的信息创建一个新用户,然后返回与新创建的用户相同的回调。截至目前,该功能按预期工作,除了即使在我的数据库中已经找到用户时它也会创建一个新用户。(“用户”变量在上面定义并具有“创建”功能。另外,我想避免使用“异步”
function processProfile(profile, callback) {
var existingUser;
if (profile.emails) {
profile.emails.forEach(function(email) {
console.log("Searching for user with this email:" + email.value);
existingUser = findUserByEmail(email.value);
if (existingUser) {
console.log("Found the existing user");
return callback(null, existingUser);
}
});
if(!existingUser){
console.log("Creating new user");
var newUser = {
id: profile.id,
firstName: profile.name.givenName,
lastName: profile.name.familyName,
email: profile.emails[0].value
};
user.create(newUser, profile.provider, function(err, user) {
if (err) throw err;
return callback(null, user);
});
}
}
}