gpt4 book ai didi

Meteor js 并行数据库获取。

转载 作者:行者123 更新时间:2023-12-02 04:48:54 24 4
gpt4 key购买 nike

假设我有如下代码从多个集合中获取数据。

//code running on server.
var a = collectionA.findOne({...});
var b = collectionB.findOne({...});
var c = collectionC.findOne({...});
var d = collectionD.findOne({...});

如果我没记错的话,上面的代码将以串行方式运行。因此,获取集合的等待时间会加起来,并且响应时间会延迟。

有没有办法以并行方式运行上述代码,最好是 promise 模式?

最佳答案

Meteor 不使用 promise 或 async,它使用 Fibers。您可以直接或通过方法使用它。

使用方法它可能看起来像这样:

服务器端:

function fetchAFromDB(arg,cb){ //function needs a callbac
var a = collectionA.findOne(arg);
if (!a) {
cb(new Meteor.Error("a-not-found", "Can't find a"));
else
cb(null,a) //first argmument is always an error
}

Meteor.methods({
fetchA: function (arg) {
var fetchAAsync = Meteor.wrapAsync(fetchAFromDB); //wrap function as async
var result = fetchAAscync(arg); //execute function
return result; //return value
}
}
//call method on the server
//async
Meteor.call('fetchA', {_id:'foo'}, function (error, result) { ... } );
//blocking
var result = Meteor.call('fetchA', {_id:'foo'});

将其称为客户端:

Meteor.call('fetchA', {_id:'foo'}, function (error, result) { ... } );

另一种方法是直接使用光纤(Documentation for fibers):

对于您的用例,它可能看起来像这样:

服务器端:

function doSomethingWith(a){...} //does something with a

var Fiber = Npm.require('fibers');
var async = Fiber(function() {
var a = collectionA.findOne({...});
return doSomethingWith(a);
});

//calls you async function
async.run();

关于Meteor js 并行数据库获取。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com