我对目前关于将async函数和关键字添加await到下一个EcmaScript的讨论感到困惑.
我不明白为什么有必要在async关键字之前使用function关键字.
从我的观点来看,await关键字等待发电机或承诺的结果做一个函数的return应该是足够的.
await应该在普通函数和生成器函数中简单可用,无需额外的async标记.
如果我需要创建一个函数作为结果应该可用await,我只需使用一个promise.
我的理由是这个很好的解释,下面的例子来自:
async function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// some more logic
}
Run Code Online (Sandbox Code Playgroud)
它也可以作为普通函数完成,如果函数的执行将等待完成孔函数,直到满足所有等待.
function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// return because createUser() and getFacebookFriends() …Run Code Online (Sandbox Code Playgroud) 我没有想法,希望得到一些有用的意见.我正在使用这个问题来压缩我的经验并分享它们,希望激励一些经销商进一步将图形数据库建模作为一流的问题/方式.
我已经验证了node.js可以使用的一些图形数据库解决方案几周.我的用例是保存不同社交用户网络帐户的交互.需要以最有效的方式使用CPU和内存.
我最重要的要求是:
Neo4j的
我真的很喜欢密码,所以我最好的选择是Neo4j.但是关于Neo4j的主要问题是JavaScript访问是非原生的.它使用的REST-API 比直接Java访问慢大约十倍(10倍).所以我看了一下node-neo4j-embedded,但它已经处于非活动状态超过两年了.看起来它的作者根本不活跃(坏迹象).
ArangoDB
ArangoDB非常好的核心开发人员回答了我关于内部的问题.最后,它意味着JavaScript是一流的公民,因为本机查询可以被推出JS.看看开源基准测试,我认为这是公平的.但我担心他们没有使用node-neo4j-embedded作为他们的基准.基准测试比较REST-API(由于@weinberger评论而编辑).我希望他们比较本机API(也许有人足够snoopy并尝试一下! - 让我们知道!).更新:正如我现在注意到的那样,OrientDB 用新的node.js驱动程序回答了基准测试(通过启动服务器使用命令高速缓存)-Dcommand.cache.enabled = true -Dcommand.cache.minExecutionTime = 3,什么是不公平的,因为它不是查询缓存基准!)
因为我喜欢使用ArangoDB作为图形数据库,所以我有3个选择(来源:FAQ):
一般来说,它像cypher一样不舒服.我不确定如何比较以及建模数据的正确方法(如Neo4J解释得很好).我很想为ArangoDB Graphs提供类似的东西.感觉ArangoDB专注于图形操作,如果你有更多的关系而不是行,Neo4J更符合使用图形的需要(使用图形而不是连接关系的原因).
MongoDB的
基于文档的MongoDB没有针对图形操作进行优化,但后来获得了实验性的内存存储引擎.还有一些项目是in_memory或图形相关,但没有什么是真正引人注目的.在本次讨论中,看起来MongoDB并不是我喜欢使用的.
OrientDB
因为有一个关于OrientDB和MongoDB的比较(来自OrientDB),我虽然即将使用这个." OrientDB有一个混合的Document-Graph引擎 …
如果我错了,请纠正我,但不可能在同一端口上启动多个 http 服务器。
基于此,有趣的是 NodeJS 集群可能会分叉。因为我知道主人正在将请求传递给分叉的工人之一。由操作系统或cluster.schedulingPolicy = "rr"管理的 worker代表“round robin”。
关键是:每个工作人员都需要自己的内存,因此您需要 x 倍的内存,其中 x 是工作人员的数量。
但是如果我喜欢在我的节点应用程序之外运行不同的(子)域,我也喜欢保存绑定到(子)域的 in_memory 数据库(例如一个简单的 JSON 文件)的不同部分。或基于资源,如subdomain.example.tdl/resource1/whatever.
不可能接缝。无论是基于资源还是基于域。
在我看来这应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(params)进行路由。
因此,应该可以告诉 master 将请求传递给特定的分叉实例。
node.js ×2
arangodb ×1
async-await ×1
ecmascript-6 ×1
javascript ×1
lokijs ×1
neo4j ×1
orientdb ×1
request ×1