Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步函数未终止_Javascript_Node.js_Firebase Authentication_Google Cloud Functions_Firebase Admin - Fatal编程技术网

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);
},
)
我的示例中包含了注释,但为了真正理解上面的代码,我建议您先阅读,然后阅读

“我正在尝试运行连续脚本,因此需要终止它。”-我不知道这是什么意思。请编辑问题,以更详细地解释您试图完成的任务。