Promises JS:函数响应未返回到主代码

问题描述 投票:0回答:1

我正在Node中构建一个代码,该代码在解决承诺后将返回响应(称为:multicreation.userCreation():]

const express = require("express")
const app = express()
const csv=require('csvtojson')
const multer = require("multer")
const csvfilename = `Users-${Date.now()}.csv`
const multiUserCreation = require("./modules/fbadmin")

const multicreation = new multiUserCreation()
const upload = multer({  
     storage: storage, 
     limits: { fileSize: 1e6}
   }).single("usersdata")

app.post("/uploadCSV",function (req, res, next) { 
    upload(req,res,function(err) {   
        if(err) {   
            res.send(err) 
        } 
        else {   
            const converter=csv()
            .fromFile(`./temp/${csvfilename}`)
            .then((json)=>{
                res.send(multicreation.userCreation(json))
            })
        } 
    })
}

另一方面,类“ multiuserCreation”的代码描述如下:

const admin = require("firebase-admin");
require("dotenv").config();

class multiUserCreation {
  userCreation(jsonUsers) {
    if (!admin.apps.length) {
      admin.initializeApp({
        credential: admin.credential.cert(),
        databaseURL: `https://${process.env.PROJECT_ID}.firebaseio.com/`,
      });
    }
    const db = admin.firestore();

    async function insertUsers(jsonUsers) {
      let messages = [];
      const users = jsonUsers
      for (let i = 0; i < jsonUsers.length; i++) {
        const message = await admin
          .auth()
          .createUser({
            email: jsonUsers[i]["email"],
            emailVerified: false,
            password: "password",
            disabled: false,
          })
          .then(function (userRecord) {       
            return {
              "User email": jsonUsers[i]["email"],
              Result: "Succesfully created",
            };
          })
          .catch(function (error) {
            return { "User email": jsonUsers[i]["email"], Result: error.code };
          });
        messages.push(message);
      }
      return messages;
    }

    const messageFinal = insertUsers(jsonUsers);
    messageFinal.then(function (result) {
      return messageFinal;
    });
  }
}

module.exports = multiUserCreation;

实际上,尽管“消息”数组已成功完成,但multiUserCreation并未向主代码返回任何内容。感谢您的帮助

javascript express google-cloud-firestore firebase-admin
1个回答
0
投票

您需要从multicreation.userCreation返回承诺检查下面的更改

const admin = require("firebase-admin");
require("dotenv").config();

class multiUserCreation {
  userCreation(jsonUsers) {
    if (!admin.apps.length) {
      admin.initializeApp({
        credential: admin.credential.cert(),
        databaseURL: `https://${process.env.PROJECT_ID}.firebaseio.com/`,
      });
    }
    const db = admin.firestore();

    async function insertUsers(jsonUsers) {
      let messages = [];
      const users = jsonUsers
      for (let i = 0; i < jsonUsers.length; i++) {
        const message = await admin
          .auth()
          .createUser({
            email: jsonUsers[i]["email"],
            emailVerified: false,
            password: "password",
            disabled: false,
          })
          .then(function (userRecord) {       
            return {
              "User email": jsonUsers[i]["email"],
              Result: "Succesfully created",
            };
          })
          .catch(function (error) {
            return { "User email": jsonUsers[i]["email"], Result: error.code };
          });
        messages.push(message);
      }
      return messages;
    }

    const messageFinal = insertUsers(jsonUsers);
    return messageFinal.then(function (result) {
      return messageFinal;
    });
  }
}

module.exports = multiUserCreation;

此外,在调用userCreation时,您需要在回调中进行处理

  const converter=csv()
            .fromFile(`./temp/${csvfilename}`)
            .then((json)=>{
                multicreation.userCreation(json).then(function (response) {
                   res.send(multicreation.userCreation(response))
                })
            })
© www.soinside.com 2019 - 2024. All rights reserved.