Javascript 在快速路线中如何等待功能完成
我有这条路线:Javascript 在快速路线中如何等待功能完成,javascript,node.js,express,Javascript,Node.js,Express,我有这条路线: app.get("/api/current_user", (req, res) => { //This function takes 3~ seconds to finish someObj.logOn(data => { someObj.setData(data); }); //This will return before function finishes return res.send(someOb
app.get("/api/current_user", (req, res) => {
//This function takes 3~ seconds to finish
someObj.logOn(data => {
someObj.setData(data);
});
//This will return before function finishes
return res.send(someObj.data);
});
下面是.logOn()函数(简化):
问题:是否有办法等待函数完成后再返回?这个函数不处理承诺,所以我不能使用async/await。我找不到任何好的答案,任何需要等待的事情要么是承诺,要么是超时。这两个都不行,对吧
注意:如果我将return语句放在回调函数中someObj.setData(data)下面代码>我将得到如下错误:
发送邮件后无法设置邮件头
此错误不是在初始路由加载时发生的,而是在我再次刷新后发生的。使用回调。将res.send更改为res.end,以便不设置任何标头。在我们看不到的函数中,似乎有东西写入了响应
app.get("/api/current_user", (req, res) => {
//This function takes 3~ seconds to finish
someObj.logOn(data => {
someObj.setData(data);
res.end(JSON.stringify(data));
});
});
您可以立即返回,但在异步回调中发送数据。是的,这就是我的建议。如果我将return语句放在回调中,我将得到一个“cant set headers error”(不能设置标题错误),应该已经添加了一个secReturn语句,不需要了。不知道为什么会得到一个无法设置头的消息,除非您尝试在之后的某个位置设置头。一旦我将return语句放在回调之外,路由就不会出错。唯一的问题是,由于它是异步的,所以返回的时间在数据之前。当它在回调中时,我在刷新时得到错误
app.get("/api/current_user", (req, res) => {
//This function takes 3~ seconds to finish
someObj.logOn(data => {
someObj.setData(data);
res.end(JSON.stringify(data));
});
});