postRegistrationHandler: function (account, req, res, next) {
console.log('postRegistrationHandler activated');
account.getCustomData(function(err, data) {
if (err) {
console.log(err.toString, "error string");
return next(err);
} else {
data.mongo_id = userCreationCtrl(account);
data.save();
next();
}
});
},
Эта функция работает почти правильно, но линия:NodeJS является асинхронным и мой код не работает в порядке, я ожидал
data.save();
работает, прежде чем заканчивает предыдущая строка, которая означает, что данные Я хочу сохранить, нет в соответствующее время.
data.mongo_id = userCreationCtrl(account);
Эта строка вызывает функцию, которая создает документ MongoDB с информацией в объекте учетной записи, а затем возвращает _id (что я пытаюсь спасти.
Я думал, может быть, с помощью .then () поможет, но это, кажется, отсутствовал здесь по какой-то причине, если кто-то увидит что-то мне не хватает, это было бы весьма полезным Спасибо
Вот файл userCreationCtrl по запросу:..!
var UserSchema = require('./../models/UserModel.js');
var createNewUser = function (account, res, next){
// We will return mongoId after it is created by submitting a newUser
var mongoId = "";
// Save StormpathID (last 22 characters of account.href property)
var newStormpathId = account.href.slice(account.href.length - 22);
console.log('stormpath ID:', newStormpathId, 'just registered!');
console.log(account);
// Create new user from model by recycling info from the Stormpath registration form and include the stormpathId as well.
var newUser = new UserSchema({
stormpathId: newStormpathId,
firstName: account.givenName,
lastName: account.surname,
email: account.email,
street: account.street,
city: account.city,
zip: account.zip
});
// This saves the user we just created in MongoDB
newUser.save(function(err, result){
console.log(result);
if (err) {
console.error(err);
}
else {
console.log("User created in MongoDB, attempting to return mongoDB _id to stormpath customData");
// Keep track of the new user's mongo _id so we can return it to the previous function and save it as Stormpath custom data.
mongoId = result._id;
console.log(mongoId, "mongoid");
return result._id;
}
});
};
module.exports = createNewUser;
Вы можете разместить содержимое функции 'userCreationCtrl'? –
Да, я отредактировал его в исходном вопросе. –
'userCreationCtrl' принимает 3 аргумента, и вы передаете только 1. Вместо того, чтобы возвращать из него' result._id', просто вызывайте обратный вызов с этим результатом, а также внутри этого обратного вызова 'data.save()' –