我收到了一条Express GET请求,该请求从Mongoose查询中提取数据,并且对于返回的每个apply plugin: 'io.fabric'
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
compile('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') {
transitive = true;
}
,外部函数会对作为doc
传递的每个doc
执行计算并返回结果,所以我可以使用Handlebars在前端渲染它们。理想情况下,我想执行我的计算x
,然后在为每个文档完成后,渲染calcA, calcB, calcC, calcD
模板。目前,当我在日志中调用它时页面没有呈现,经过一段时间后,它会显示test-env.hbs
,大概是因为回调卡在了某个地方。
快速GET请求
GET /test-env - - ms - -
典型的var updates = require('./updates.js');
app.get('/test-env', function(req, res, next){
Market.find({"marketname" : 'To Win'})
.then(function(doc){
async.forEach(doc, function(x, callback){
updates.calcA(x);
updates.calcB(x);
updates.calcC(x);
updates.calcD(x);
}, function(err){
if(err)
return console.log(err);
res.render('test-env', {title: 'Test Page', items: doc});
});
});
});
功能
我想将calc
和returnA
添加到returnB
数据中,以便我可以在Handlebars中的docs
表达式中进行渲染
{{#each}}
答案 0 :(得分:3)
您没有在异步迭代器中调用回调。如果calc
函数是异步的,那么应该单独处理这些回调。如果它们不是异步的,那么正常的forEach
就可以了。
...
async.forEach(doc, function(x, callback){
updates.calcA(x);
updates.calcB(x);
updates.calcC(x);
updates.calcD(x);
callback(); // Call the callback to move on to the next item
}, function(err){
if(err)
return console.log(err);
res.render('test-env', {title: 'Test Page', items: doc});
});
...
答案 1 :(得分:0)
看起来好像你实际上没有调用你的回调函数。
opacity: 1;
看看:http://caolan.github.io/async/docs.html#each 该示例显示您需要显式调用callback()函数。
顺便说一句,你的计算(以及回调函数)是否取决于 async.forEach(doc, function(x, callback){
updates.calcA(x);
updates.calcB(x);
updates.calcC(x);
updates.calcD(x);
// <--- callback() needs to go here.
}
集合内容的顺序?因为doc
方法实际上并不能保证async.forEach
中的每个元素的计算顺序与它们在集合中的顺序相同。因此,如果您是,那么如果无序计算可能导致不同的结果,则值得考虑。