Javascript Express app.use未发送正确的假数据

Javascript Express app.use未发送正确的假数据,javascript,express,callback,routes,faker,Javascript,Express,Callback,Routes,Faker,我在练习Express 4.x时注意到以下几点: app.get('/fake', function(req, res) { var obj = []; for (let i = 0; i < 3; i++) { jsf.resolve(fakeSchema).then(function(iter) { obj.push(iter); }); } res.send(obj); }); app.get('/fake',函数(req,res){ v

我在练习Express 4.x时注意到以下几点:

app.get('/fake', function(req, res) {
  var obj = [];
  for (let i = 0; i < 3; i++) {
    jsf.resolve(fakeSchema).then(function(iter) {
      obj.push(iter);
    });
  }
  res.send(obj);
});
app.get('/fake',函数(req,res){
var-obj=[];
for(设i=0;i<3;i++){
解析(fakeSchema).then(函数(iter){
目标推力(iter);
});
}
res.send(obj);
});
因此,在这条路线上,我得到了
“[]”
,而我希望收到一个包含3个(假)文档的数组

仅供参考,在记录每个循环时,我可以清楚地看到生成的文档,甚至在数组内部


有什么解释吗?

您的jsf.resolve函数是异步的,因此您可以使用
async/await
以同步方式执行任务

app.get('/fake',异步函数(req,res){
var-obj=[];
for(设i=0;i<3;i++){
试一试{
var iter=await jsf.resolve(fakeSchema);
目标推力(iter);
}捕获(e){}
}
res.send(obj);
});

您的jsf.resolve函数是异步的,因此您可以使用
async/await
以同步方式执行任务

app.get('/fake',异步函数(req,res){
var-obj=[];
for(设i=0;i<3;i++){
试一试{
var iter=await jsf.resolve(fakeSchema);
目标推力(iter);
}捕获(e){}
}
res.send(obj);
});

@Nishant Dixit的答案也正确! 如果您愿意,也可以尝试此简单解决方案:

app.get('/fake', function(req, res) {
  var obj = [];
  for (let i = 0; i < 3; i++) {
    try {
        jsf.resolve(fakeSchema).then(function(iter) {
           obj.push(iter);
           res.send(obj);
    } catch (e) {
        res.send(e);
    }
    });
  };
});
app.get('/fake',函数(req,res){
var-obj=[];
for(设i=0;i<3;i++){
试一试{
解析(fakeSchema).then(函数(iter){
目标推力(iter);
res.send(obj);
}捕获(e){
res.send(e);
}
});
};
});

@Nishant Dixit的答案也正确! 如果您愿意,也可以尝试此简单解决方案:

app.get('/fake', function(req, res) {
  var obj = [];
  for (let i = 0; i < 3; i++) {
    try {
        jsf.resolve(fakeSchema).then(function(iter) {
           obj.push(iter);
           res.send(obj);
    } catch (e) {
        res.send(e);
    }
    });
  };
});
app.get('/fake',函数(req,res){
var-obj=[];
for(设i=0;i<3;i++){
试一试{
解析(fakeSchema).then(函数(iter){
目标推力(iter);
res.send(obj);
}捕获(e){
res.send(e);
}
});
};
});

尽管@Nishant提供的答案有效,但我建议使用这种方法

让jsf={};
//伪造jsf.resolve方法
jsf.resolve=(param)=>{
返回新承诺((解决)=>{
设置超时(()=>{
解析(Math.random());
}, 1000);
})
};
设fakeSchema={};
设obj=[];
让承诺=[];
for(设i=0;i!==3;i++){
promises.push(jsf.resolve(fakeSchema).then(function(iter){
目标推力(iter);
}));
}
承诺。所有(承诺)。然后(()=>{
控制台日志(obj);

});尽管@Nishant提供的答案有效,但我建议使用这种方法

让jsf={};
//伪造jsf.resolve方法
jsf.resolve=(param)=>{
返回新承诺((解决)=>{
设置超时(()=>{
解析(Math.random());
}, 1000);
})
};
设fakeSchema={};
设obj=[];
让承诺=[];
for(设i=0;i!==3;i++){
promises.push(jsf.resolve(fakeSchema).then(function(iter){
目标推力(iter);
}));
}
承诺。所有(承诺)。然后(()=>{
控制台日志(obj);

});
jsf.resolve(fakeSchema)
返回一个承诺,当您尝试返回数组时,该承诺可能尚未解析。请检查此项。你想要的是等待,直到所有的承诺都得到解决。放置
res.send(obj)
obj.push(iter)
line立即
jsf.resolve(fakeSchema)
返回一个承诺,当您尝试返回数组时,该承诺可能尚未解析。请检查此项。你想要的是等待,直到所有的承诺都得到解决。放置
res.send(obj)
obj.push(iter)行立即在此实现中,服务器在每次迭代中发送obj是否可以?在此实现中,服务器在每次迭代中发送obj是否可以?