Javascript 在节点orm中是否有一种同步调用每个函数的方法?
我对node-orm2的异步行为有问题。我有这样一个问题:Javascript 在节点orm中是否有一种同步调用每个函数的方法?,javascript,node.js,express,node-orm2,Javascript,Node.js,Express,Node Orm2,我对node-orm2的异步行为有问题。我有这样一个问题: req.models.posts .find(...) .order('-whatever') .each(doMagic) //Problem happens here .filter(function(post) { ... }) .get(callback); function doMagic(post, i) { post.getMagic(function(err, magic) {
req.models.posts
.find(...)
.order('-whatever')
.each(doMagic) //Problem happens here
.filter(function(post) { ... })
.get(callback);
function doMagic(post, i) {
post.getMagic(function(err, magic) {
...
});
};
我的问题是,由于post.getMagic()
内部发生的事情是异步的,所以我的回调函数在doMagic
完成之前执行。检查我验证了这是正常的行为,但由于这是一个express应用程序,我的服务器用错误的信息响应
我尝试使用调用
getMagic
synchronous,但没有成功。这可能是我遗漏的东西。有没有办法让每个函数都像同步映射函数一样工作?更改代码以获取帖子,一旦有帖子,使用async.js对其进行迭代,完成后发送响应
比如:
var async = require('async');
req.models.posts
.find(...)
.order('-whatever')
.each()
.filter(function(post) {...
})
.get(function(posts) {
//iterate over posts here
async.eachSeries(posts, function(file, callback) {
post.getMagic(function(err, magic) {
//here comes the magic
//and then callback to get next magic
callback();
});
}, function(err) {
//respond here
});
});
您是否尝试在doMagic()中回调?函数doMagic(post、i、回调)。。。然后在post.get之后调用它……从数据库中检索到的每个元素都会调用一次doMagic函数,因此这不起作用。然后更改代码以获取帖子,一旦您让它们使用async.js进行迭代,并多次发送responseThanks,@Molda,您就节省了一天:D如果您需要代表,回答这个问题,我很乐意接受