Javascript 所有操作完成nodejs后返回响应

Javascript 所有操作完成nodejs后返回响应,javascript,node.js,Javascript,Node.js,学习nodejs,如何在以下请求中返回完整响应?我似乎总是检索到结果的快照。很明显,我在所有工作完成之前就回来了,请问有什么帮助吗 myapp.get('/someurl', (req, res) => { dbconn.connection.then((conn) => { conn.getdata().then((data) => { if (data != null) { var foo = n

学习nodejs,如何在以下请求中返回完整响应?我似乎总是检索到结果的快照。很明显,我在所有工作完成之前就回来了,请问有什么帮助吗

  myapp.get('/someurl', (req, res) => {
      dbconn.connection.then((conn) => {
        conn.getdata().then((data) => {
          if (data != null) { 
            var foo = new foo();
            var result = [];
            for (var i = 0; i <= data.foos.length - 1; i++) {

              foo.Id = data.foos[i].myid;
              foo.name = data.foos[i].atamyname;
              foo.siblings = _.filter(data.foos, (fo) => {
                  if(fo.Id === data.foos[i].myid ){
                    return fo;
                  }
              });
              result.push(foo);
            }
            return result;
          }
        });
      });
    });
myapp.get('/someurl',(req,res)=>{
dbconn.connection.then((conn)=>{
连接getdata()。然后((数据)=>{
如果(数据!=null){
var foo=new foo();
var结果=[];
对于(var i=0;i{
if(fo.Id==data.foos[i].myid){
返回fo;
}
});
结果:推送(foo);
}
返回结果;
}
});
});
});

您是否尝试过以下方法

return res.json(result);

你试过以下方法吗

return res.json(result);

从路由器的外观来看(可能是
express
),第一行表示您正在处理
/someurl
GET
请求。注意,第一个函数有两个参数:
req
res
。但是,您的代码没有使用它们,因此您可能不了解数据是如何返回给调用方的

(req,res,next)
形式的函数称为
中间件
函数,参数有特定用途:

  • req-传入的http请求对象
  • res-传出http响应对象
  • 下一步-可用于通知路由器继续或抛出错误
当函数收集了所需的数据后,应使用
res
对象将其发送回调用者。例如,如果您希望返回包含一些数据的JSON对象,那么您的调用可能如下所示:

 myapp.get('/someurl', (req, res) => {
   return res.json({message: "it worked"});
 }
在您的情况下,您希望发回数据处理的结果,因此您可以替换显示
return result的行使用此选项:

  return res.json(result);
这告诉http响应将
resultCode
设置为200,并将响应
body
设置为JSON格式的
result
数组

如果JSON不是您想要返回的格式,则可以使用其他
res
函数。有关更多详细信息,请参阅

原始实现的问题是路由器没有使用返回值

此外,您还需要处理
数据
以某种方式返回为
null
的情况。可能通过使用
返回res.status(404.end()
返回res.json([])

除此之外,您可能无法正确构建
结果
数组。请注意,您创建了一个
foo
实例,并不断将该对象推送到数组上。每次通过循环时,您都应该创建一个新的
foo
对象,否则您只需重复修改同一个对象即可。试试这个:

if (data != null) { 
  var result = [];
  for (var i = 0; i <= data.foos.length - 1; i++) {
    var foo = new foo();  // <-- create a fresh one inside the loop
    foo.Id = data.foos[i].myid;
    foo.name = data.foos[i].atamyname;
    foo.siblings = _.filter(data.foos, (fo) => {
      if(fo.Id === data.foos[i].myid ){
        return fo;
      }
    });
    result.push(foo);
  }
  return res.json(result);
}
如果(数据!=null){
var结果=[];

对于(var i=0;i从路由器的外观来看(可能是
express
)第一行表示您正在处理对
/someurl
GET
请求。请注意,第一个函数包含两个参数:
req
res
。但是您的代码没有使用它们,因此您可能不了解数据是如何返回给调用方的

(req,res,next)
形式的函数称为
中间件
函数,参数有特定用途:

  • req-传入的http请求对象
  • res-传出http响应对象
  • 下一步-可用于通知路由器继续或抛出错误
当您的函数收集了所需的数据后,您应该使用
res
对象将其发送回调用方。例如,如果您想返回包含一些数据的JSON对象,您的调用可能如下所示:

 myapp.get('/someurl', (req, res) => {
   return res.json({message: "it worked"});
 }
在您的情况下,您希望发回数据处理的结果,因此您可以将写有
return result;
的行替换为以下内容:

  return res.json(result);
这告诉http响应将
resultCode
设置为200,并将响应
body
设置为JSON格式的
result
数组

如果JSON不是您想要返回的格式,则可以使用其他
res
函数。有关更多详细信息,请参阅

原始实现的问题是路由器没有使用返回值

此外,您还需要处理
数据
以某种方式返回为
null
的情况。可以使用
返回res.status(404).end()
返回res.json([])

除此之外,您可能无法正确构建
结果
数组。请注意,您创建了一个
foo
实例,并不断将该对象推送到数组中。您应该在循环中每次创建一个新的
foo
对象,或者您只需不断重复修改同一对象。请尝试以下操作:

if (data != null) { 
  var result = [];
  for (var i = 0; i <= data.foos.length - 1; i++) {
    var foo = new foo();  // <-- create a fresh one inside the loop
    foo.Id = data.foos[i].myid;
    foo.name = data.foos[i].atamyname;
    foo.siblings = _.filter(data.foos, (fo) => {
      if(fo.Id === data.foos[i].myid ){
        return fo;
      }
    });
    result.push(foo);
  }
  return res.json(result);
}
如果(数据!=null){
var结果=[];

对于(var i=0;谢谢),这不是问题。我确实得到了响应,但没有得到完全的响应。谢谢,这不是问题。我确实得到了响应,但没有得到完全响应。返回RES.JSON(结果)不返回完整响应。您认为什么是“完全响应”??我希望看到4个对象返回,但是我总是返回1,这是最后一个。实际上,忽略我,问题是我总是返回数组中的最后一个元素,这是我的代码的结果!jheezi将标记它,以便在将来帮助其他人,在我的实例中,这是一个逻辑错误:)return res.json(result)不返回完整的响应,你认为什么是“完全响应”?我希望看到4个对象返回,但是我总是返回1,这是最后一个实际上忽略我的问题,问题是我总是返回数组中最后一个元素,结果是在我的代码中!