創建新用戶帳戶時,我使用Accounts.onCreateUser函數將數據插入到新集合中。我想在插入之前檢查插入是否成功。我的代碼似乎工作,但它似乎非常混亂。我想知道是否有更清晰的方式來編寫此代碼。Accounts.onCreateUser清理我的代碼
Accounts.onCreateUser((options, user) => {
if (user) {
CandidateProfile.insert({
userId: user._id,
firstName: options.profile.name.first,
lastName: options.profile.name.last
});
var checkForNewCandidateProfile = CandidateProfile.findOne(
{ userId: user._id },
{ fields: { userId: 1 } }
);
var userId =
checkForNewCandidateProfile && checkForNewCandidateProfile.userId;
if (userId === user._id) {
return user;
}
}
});
我是一個可行的有些驚訝。 afaik,insert是一個異步操作,並且您正在從集合中立即讀取數據。我會懷疑findOne()沒有找到任何東西。我真的好奇這是如何工作。無論通過有條件地返回用戶,是否表示如果寫入收集失敗,您希望註冊失敗? – zim
當插入出現問題時,它已經失敗,並且在客戶端,用戶看到「出現內部服務器錯誤」。日誌顯示完整的錯誤。你說你很驚訝它的工作原理,這是我的問題,寫這個的正確方法是什麼? – bp123
由於onCreateUser()意味着同步工作,因此Futures可能會在此上下文中提供類似同步的體驗。看看我的答案在這裏可能是什麼樣的:http://stackoverflow.com/a/43564544/3199246 – zim