javascript - Promises JS:函数响应不返回到主代码
问题描述
我正在 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 并没有向主代码返回任何内容。谢谢你的帮助
解决方案
您需要从 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))
})
})
推荐阅读
- visual-studio-code - Visual Studio Code 的 PHP Doc Blocker 无法正常工作
- ios - 如何根据设备方向更改堆栈视图方向?
- twitter-bootstrap - Bootstrap 的可折叠菜单不起作用
- google-cloud-platform - Google Compute Engine 上的 A2 区域配额限制不会增加
- reactjs - 如何解决未安装组件的状态更新(挂钩)
- node.js - 如何在 mongodb 和 mongoose 模型中使用 cloudinary
- javascript - iframe 内部链接到嵌入的网站
- python - 在后台线程中更新 SQLAlchemy 中的记录?
- javascript - 为什么我得到:TypeError:无法读取未定义的属性“toLowerCase”(React JS)
- javascript - 为什么事件监听器会执行以下代码?