我是React / nodejs / express / javascript的新手,遇到了以下问题:
我想获取一个数字,然后发布该数字+ 1,然后我要使用该数字(newFreshId
创建一个新的js对象,然后添加该事件以将该事件添加到我的{{ 1}}。当我尝试运行代码时,可以获取并发布到schedulerData
,但是/api/num
之后的所有内容似乎都无法运行。
我想按顺序执行此操作,所以我在完成每项任务后都使用.then(function(response) {
,这样我就不会遇到问题。
我还尝试删除所有.then
,以使用while循环来等待值更改。这也没有用。
代码:
客户:
.then
服务器:
this.newEvent = (schedulerData, slotId, slotName, start, end, type, item) => {
let newFreshId = 0;
let newEvent = {}
axios.get("/api/num").then(function(response) {
newFreshId = response.data[0] + 1;
// console.log(newFreshId);
}).then(function() {
axios.post("/api/num", {
id: newFreshId
}).then(function(response) {
console.log(response)
// handle success
newEvent = {
id: newFreshId,
title: this.state.title,
start: start,
end: end,
resourceId: slotId
};
schedulerData.addEvent(newEvent);
this.setState({
viewModel: schedulerData
});
// while(JSON.stringify(newEvent) === '{}'){
// console.log('waiting')
// }
console.log(newEvent)
schedulerData.addEvent(newEvent);
console.log(newEvent)
this.setState({
viewModel: schedulerData
});
})
})
};
感谢所有帮助:)
答案 0 :(得分:0)
fs.writeFileSync
没有回调,因此您添加的函数永远不会执行:https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options
这意味着永远不会将响应发送回客户端,并且axios承诺也不会得到解决。
尝试将fs.writeFile
与回调一起使用:https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback
在出现错误的情况下发送响应也是一个好主意。
app.post('/api/num', function(req, res) {
var id = req.body.id
var fs = require('fs');
fs.writeFile("./number.json", "[ "+id+" ]", function(err) {
if(err) {
console.log(err);
return res.status(200)
}
res.status(200)
})
})
最后,尽管在这种情况下它无济于事,但您应该在axios链的最末端添加.catch
。承诺链中发生的任何错误都将在那出现。
一个例子:
axios.get(specs).then(someFunction).catch(e => console.error(e));
答案 1 :(得分:0)
对我来说,我也面临着同样的问题,我发现这是因为发出发布请求后我正在使用一些重定向
window.location.href = "/{redirect to some rout}"
这使控制台立即更改,因此除非删除重定向,否则我看不到then响应。