如何在快递路线等待功能完成

时间:2017-08-17 08:03:53

标签: 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(someObj.data);
  });

这是.logOn()函数(简化):

logOn(_callback) {
  //has some data
  var info = {};

  //returns data in callback
  _callback(info);
}

问题:在返回之前有没有办法等待函数完成?这个函数不处理promises,所以我不能使用async / await。我找不到任何好的答案,任何等待的事情都要处理promises或setTimeout。这两个都行不通,对吧?

注意:如果我将return语句放在someObj.setData(data);下的回调中,我会收到如下错误:

  

在发送标题后无法设置标题

此错误不会出现在初始路由加载中,而是在我再刷新一次之后。

1 个答案:

答案 0 :(得分:1)

使用回调。将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));
    });
  });