我发现自己经常遇到需要在数据库中查询多个模型才发送它们以HTML格式呈现的情况。我所做的是
ModelA.findById({ ... }).then(function(modelA) {
ModelB.findById({ ... }).then(function(modelB) {
return both modelA and modelB
});
});
这有几个问题:
的
ModelA.findById({ ... }).then(function(modelA) {
ModelB.findById({ ... }).then(function(modelB) {
ModelC.findById({ ... }).then(function(modelC) {
ModelD.findById({ ... }).then(function(modelD) {
ModelE.findById({ ... }).then(function(modelE) {
ModelF.findById({ ... }).then(function(modelF) {
return all models
});
});
});
});
});
});
如何同时执行查询并仅在执行完所有查询后继续页面呈现?
答案 0 :(得分:1)
在这种情况下,您可以使用Promise.all
,所有查询都将同时执行,但是当您的所有查询都返回时,then
函数将会执行。
var queries = [
ModelA.findById({...}),
ModelB.findById({...}),
ModelC.findById({...}),
ModelD.findById({...}),
ModelE.findById({...}),
ModelF.findById({...})
];
Promise.all(queries).then(function (results) {
console.log(results); // [modelA, modelB ...]
});
您还应该阅读有关javascript承诺的内容。