Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在快速路线中如何等待功能完成_Javascript_Node.js_Express - Fatal编程技术网

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));
    });
  });