我正在使用nodejs
这是我的函数createSchema:
const createSchema = () => {
Business.findAll({
raw: true,
}).then((data) => {
data.forEach((client) => {
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
});
console.log('Postgres schema created');
}).catch(() => {
});
});
}).catch((err) => {
console.log('Warning:', err.message);
});
};
createSchema();
我在这个帖子函数
中调用了这个函数exports.createBusiness = (req, res) => {
const business = {
name: req.body.name,
code: req.body.code,
email: req.body.email,
};
Business.create(business)
.then((rawbusinessData) => {
createSchema() // this is the function
.then(() => { . // i want to complete createSchema fully then only i want to execute this below stuffs
const businessData = rawbusinessData.get({ plain: true });
const loginDetails = {
username: 'sameer',
password: encrypt('sameer'),
};
const schemaLogin = postgresDB.models.login.schema(businessData.code);
schemaLogin.create(loginDetails).then((loginData) => {
console.log('loginData:', loginData);
});
res.status(200).send(businessData);
});
})
.catch((err) => {
console.log('err:', err);
});
};
我在第二个帖子函数中调用了第一个函数,名为 createBusiness ,
我想完全完成createSchema功能,然后我只需要在我的第二个函数 createBusiness
中执行其他然后方法()查看我的代码,我发表评论,需要先行,
我试过异步等待但没有工作!
答案 0 :(得分:2)
你错过了很多地方的回复承诺。你需要归还所有这些:
{}
所以主要包装Promise.all
并使用Array.map()
实际返回你正在迭代的承诺
另一件事是不要过度使用块.catch()
。只需返回箭头功能,无论如何只有一个东西。 (可选)删除onDestroy()
并允许此函数的错误抛出。在调试之后,你实际上应该"应该"删除该行并允许抛出错误。
答案 1 :(得分:0)
理想情况下,旅游代码应该有效。发生的问题可能是因为createSchema()
函数没有返回承诺。
const createSchema = () => {
Business.findAll({
raw: true,
}).then((data) => {
data.forEach((client,index) => {
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
if(index==data.length-1)
return true;
});
console.log('Postgres schema created');
}).catch(() => {
});
});
}).catch((err) => {
console.log('Warning:', err.message);
});
};