javascript - 在 JavaScript+Node.js 中如何等待上一个 post 请求完成?
问题描述
我正在尝试在 JavaScript(客户端)中执行两个发布请求,但第二个请求似乎在第一个请求完成之前运行。
这是我的代码:
客户端代码:
$.post("/startGame", {username: username});
$.post("/lookingForAPlayer", {});
服务器端代码:
var idPlayer;
app.post('/startGame', function(req, res) {
const idPlayerProm = new Promise((resolve, reject) => {
dbConnection.getIdPlayer(req.body.username).then(data => {
resolve(data)
});
});
Promise.all([idPlayerProm]).then(data => {
idPlayer = data[0];
console.log("idPlayer1: " + idPlayer) //Here idPlayer has a value
const gamePromise = new Promise((resolve, reject) => {
dbConnection.addGame(idPlayer).then(data => {
resolve(data);
});
});
Promise.all([gamePromise]).then(data => {
idGame = data[0];
});
})
});
app.post('/lookingForAPlayer', function(req, res) {
console.log("idPlayer2: " + idPlayer); //Here idPlayer is undefined
});
结果:
如您所见,它甚至idPlayer2
在应该在之后打印时首先打印idPlayer1
。
我猜我需要Promise
在客户端做一些事情,但我不确定我是如何在客户端做这些事情的新手。
有什么帮助吗?
@DanMossa 的更新(我无法通过他/她的回答获得从服务器发送的值)。
app.post('/startGame', function(req, res) {
dbConnection.getIdPlayer(req.body.username).then(data1 => {
dbConnection.addGame(data1).then(data2 => {
res.end(JSON.stringify([data1, data2]));
});
});
});
app.post('/lookingForAPlayer', function(req, res) {
//Here I will also res.end() as I do in /startGame.
});
解决方案
处理@Yousaf 的帖子,使用async/await
可能更容易在心理上形象化。
try {
const res = await fetch('/startGame', {
method: 'POST',
body: JSON.stringify({ username: username }),
headers: { 'Content-Type': 'application/json' },
});
await fetch('/lookingForAPlayer', {
method: 'POST',
body: JSON.stringify({}),
headers: { 'Content-Type': 'application/json' },
});
} catch (error) {
console.log(error);
}
推荐阅读
- spring - 为什么在 Spring Security 中出现未知 [Error Creating bean with name 'delegatingApplicationListener']?重要的
- vue.js - v-model 在 Vue 2.x 中有哪些限制?
- ruby-on-rails - 在厨师中使用数组时,我遇到了问题
- python - 将数据保存到模型的问题。错误:禁止保存()以防止由于未保存的相关对象而导致数据丢失
- azure - 在域中使用 VisualStudio 2019 pro
- plotly.js - 在我的 html 网页中绘制的图表根本没有呈现
- java - 如何在 Spring Boot 或 Java 中为变量验证创建验证实用程序
- github - 在 Slack 上使用 Github App 取消订阅回购
- elasticsearch - 弹性搜索未返回附近输入日期的记录
- spring - Feign客户端日志级别干预pdf二进制内容