Javascript 异步函数未终止
我正在编写一个异步函数Javascript 异步函数未终止,javascript,node.js,firebase-authentication,google-cloud-functions,firebase-admin,Javascript,Node.js,Firebase Authentication,Google Cloud Functions,Firebase Admin,我正在编写一个异步函数async\u create\u user,用于我的firebase HTTPS函数create\u user,格式为index.js index.js exports.create_user = functions.https.onCall(async_create_user); 我正在一个文件user.js中测试它们,并运行node user.js 代码获得了在我的数据库中创建用户文档的预期行为,但我对该函数的意图也是终止,以便我可以使用一系列其他函数对其进行测试。我
async\u create\u user
,用于我的firebase HTTPS函数create\u user
,格式为index.js
index.js
exports.create_user = functions.https.onCall(async_create_user);
我正在一个文件user.js
中测试它们,并运行node user.js
代码获得了在我的数据库中创建用户文档的预期行为,但我对该函数的意图也是终止,以便我可以使用一系列其他函数对其进行测试。我可以知道是否有一个实现让它终止
const { admin, db } = require("../util/admin");
//const db = admin.firestore();
//const admin = require('firebase-admin');
//admin.initializeApp(config);
const config = require("../util/config");
const { uuid } = require("uuidv4");
const {
success_response,
error_response
} = require("../util/validators");
const firebase = require("firebase");
firebase.initializeApp(config);
const {
validateSignupData,
validateLoginData,
reduceUserDetails,
} = require("../util/validators");
exports.async_create_user = async function(data, context) {
// Perform Authentication Checks
try {
const userRecord = await admin.auth().createUser({
displayName: data.displayName,
email: data.email,
emailVerified: true,
password: data.password,
disabled: false
});
await admin.auth().setCustomUserClaims(userRecord.uid, {user_basic: true})
//data required for the personal?
const PrivateUser = {
display_name: data.displayName,
email: data.email,
notification_ids: [],
saved_posts: [],
last_updated: admin.firestore.FieldValue.serverTimestamp()
};
const noImg = "no-img.png";
//sets default profile image to be the empty image
const PublicUser = {
profile_image:
{
url: "some url",
uid: userRecord.uid
}
}
await db
.collection("users_private")
.doc(userRecord.uid)
.set(PrivateUser);
await db
.collection("users_public")
.doc(userRecord.uid)
.set(PublicUser);
console.log(userRecord.uid);
return success_response();
} catch (error) {
console.log("Error in creation of user account", error);
return error_response(error);
}
}
const mockUser = {
displayName: "Mallory",
email: "mallory@example.org",
password: "123456",
disabled: false,
emailVerified: true
}
exports.async_create_user(mockUser);
我写了一个名为的库,它去除了许多围绕承诺的污点。结果是代码更简单;rubico处理异步终止,因此您不必这样做
const{pipe,fork,get,tap,tryCatch}=require('rubico'))
const setCustomUserClaims=uid=>
admin.auth().setCustomUserClaims(uid,{user\u basic:true})
const getServerTimestamp=()=>admin.firestore.FieldValue.serverTimestamp()
const createPrivateUser=({uid,PrivateUser})=>
db.collection('users_private').doc(uid).set(PrivateUser)
const createPublicUser=({uid,PublicUser})=>
db.collection('users\u public').doc(uid).set(PrivateUser)
const createUser=pipe([
叉子({
displayName:get('displayName'),//输入=>input.displayName
email:get('email'),//input=>input.email
emailVerified:()=>true,//()=>true
密码:get('password'),//input=>input.password
已禁用:()=>false,//()=>false
}),//{displayName,email,password}=>{displayName,email,emailVerified,password,disabled}==userPreRecord
admin.auth().createUser,//userPreRecord=>userRecord
点击(管道([get('uid'),setCustomUserClaims]),//setCustomUserClaims带有uid,但不关心返回
叉子({
uid:get('uid'),//userRecord=>userRecord.uid
私人用户:叉子({
display\u name:get('displayName'),//userRecord=>userRecord.displayName
email:get('email'),//userRecord=>userRecord.email
通知ID:()=>[],
已保存的帖子:()=>[],
上次更新:getServerTimestamp,
}),
公共用户:fork({
个人资料图片:fork({
url:()=>“没有img.png”,
uid:get('uid'),//userRecord=>userRecord.uid
}),
}),
}),
点击(fork)([//点击:通过以下函数的fork运行输入并放弃返回。
createPrivateUser,//userRecord=>createPrivateUser(userRecord)
createPublicUser,//userRecord=>createPublicUser(userRecord)
])),
])
exports.async\u create\u user=tryCatch(//try pipe([createUser,success\u response]),catch with err=>{…}
管道([createUser,success\u response]),
错误=>{
console.log(“创建用户帐户时出错”,err);
错误响应(err);
},
)
我的示例中包含了注释,但为了真正理解上面的代码,我建议您先阅读,然后阅读“我正在尝试运行连续脚本,因此需要终止它。”-我不知道这是什么意思。请编辑问题,以更详细地解释您试图完成的任务。