gpt4 book ai didi

javascript - Node.js 异步用例

转载 作者:行者123 更新时间:2023-11-30 07:21:16 24 4
gpt4 key购买 nike

最近,我一直在开发 Web 应用程序,我意识到我根本没有使用异步属性。因此,我最终得到了很多嵌套回调。

比如用户想通过特定的API从服务器获取文件,我会有类似这样的代码,

db.query(<select list of permitted files_names>, function(err, filenames) {
async.each(file_names, function(name, next) {
//open each file to put into array
});
})

此代码需要查询数据库以获取文件名列表,然后异步循环并将每个文件内容放入数组中。最后它将完成的数组返回给客户端。

使用嵌套回调和异步库,此代码的行为类似于同步代码。

names = db.querySync(//select list of permitted files_names);
for(name in names) {
//open each file to put into array
}

我最好写这样的同步代码,因为它更简洁。我的用例可能有点奇怪,但我的大多数 API 都以类似的方式运行,这让我想到为什么我什至需要异步函数?

如果这两个代码在性能方面有什么不同,有人能告诉我吗?我如何利用非阻塞属性来提高这个用例的性能?

最佳答案

如果您正在编写回调函数,那么您根据定义使用异步调用。回调函数在操作完成或出错时触发。你不需要花哨的库来使用这些,这是 Node 的 event-loop driven subsystem 的支柱运作。

Node 强烈 建议不要使用“同步”调用。 Node 核心只包括少数几个作为方便的工具,它们是最后的手段。许多库甚至不支持它们,因此您绝对必须习惯编写异步代码。例如,在浏览器环境中,如果不阻塞 JavaScript 运行时并使页面停止,您根本无法使用阻塞调用。

我更喜欢使用 Promises线 Bluebird实现保持代码有序。还有其他方法,比如 async库,它可以帮助管理其他复杂的嵌套模式。

一些好处包括 Promise.all 方法运行一系列 promise 直到完成然后触发下一步,以及 Promise.map 迭代一个列表,为每个元素运行异步代码,然后在列表完成时前进。

如果您在组织代码方面遵守纪律,那还不错。与传统的默认同步语言(如 Ruby、Python 或 Java)相比,Node 确实需要更多地关注操作顺序,但您可以习惯它。一旦你开始使用异步代码而不是与它抗争,你通常可以快速、高效地完成大量工作,而且不会大惊小怪,在许多情况下比你必须兼顾的其他语言更有效线程加上锁定和/或处理 IPC。

关于javascript - Node.js 异步用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928400/

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