gpt4 book ai didi

javascript - 使用回调或 promise 使异步代码像 nodejs 中的同步一样工作

转载 作者:行者123 更新时间:2023-11-30 14:32:12 25 4
gpt4 key购买 nike

我的 nodejs api 函数:

exports.userSignup = (req, res) => {
const home = {
address: req.body.name,
phoneno: req.body.code,
};
Home.create(home)
.then((data) => {
createUser()
// i want to complete the above createUser() function fully then only i need to move to this below then function

.then(() => {
const loginDetails = {
username: 'stackoverflow',
};
User.create(loginDetails)
.then((data) => {
return res.status(200).send(data);
}).catch((err) => {
console.log('error while create schema:', err);
});
});

})
.catch((err) => {
console.log('err:', err);
});
};

我的createUser函数代码:

const createUser = () => {
Home.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((err) => {
console.log(err);
});
});
}).catch((err) => {
console.log('Warning:', err.message);
});
};
createUser();

但是这个是异步工作的,

如何使用 promise resolve reject 或 callback 来实现?

查看我的代码,我做了一个评论需要先工作,

我尝试使用 async await 但没有用!

最佳答案

为了让 promise 链起作用,您必须为任何异步函数返回一个 promise,否则它不会等待。您还为迭代通过的每个客户端进行另一个异步调用。为了一次处理多个 promise,您需要将每个 promise 插入一个数组并将其传递给 Promise.all。这是一个应该有效的片段。

const createUser = () => {
return Home.findAll({
raw: true,
}).then((data) => {
const promises = [];
data.forEach((client) => {
promises.push(
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
console.log('Postgres schema created');
})
})
);
});
return Promise.all(promises);
}).catch((err) => {
console.log('Warning:', err.message);
});
};

关于javascript - 使用回调或 promise 使异步代码像 nodejs 中的同步一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50998103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com