Асинхронная функция не завершается - PullRequest
0 голосов
/ 28 мая 2020

Я пишу асинхронную c функцию async_create_user, используемую для моей HTTPS-функции firebase create_user формы в index.js.

index. js

exports.create_user = functions.https.onCall(async_create_user);

Я тестирую их все в одном файле user.js вот так и выполняю node user.js Код получает ожидаемое поведение при создании документов User в моей базе данных, но мое намерение для этой функции также должен завершиться, чтобы я мог проверить его с помощью последовательности других функций. Могу ли я узнать, есть ли реализация, позволяющая прекратить его работу.

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);

1 Ответ

0 голосов
/ 28 мая 2020

Я написал библиотеку под названием rubico , которая удаляет много лишнего, окружающего Promises. Результат - более простой код; rubico обрабатывает асинхронное завершение, поэтому вам не нужно это делать. 1007 *, затем документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...