gpt4 book ai didi

javascript - 何时使用 ES2017 内置的 'async' 或导入 'npm i async'

转载 作者:行者123 更新时间:2023-12-05 09:29:47 25 4
gpt4 key购买 nike

我最近了解到 ES2017 中内置了 async/await,但是我已经做了几个需要包 async 的项目为了使用异步/等待。

是否有一种简单的方法可以告诉我什么时候可以正常访问 async 或什么时候需要导入它?我需要使用那个 npm 包吗?如果现在语言中内置了完全相同的功能,异步包(目前显示每周下载量为 47,469,002 次)的目的是什么?

对于需要异步的示例项目,请随意查看 Local-Library MDN 上的 MongoDB/Express/Node 教程项目。

因为这是一个 Express 应用程序(我自己的几个应用程序也是),这与 ExpressJS 有什么关系吗?

我环顾四周试图找到这些答案,但一无所获。感谢任何帮助理解这一点。

最佳答案

NPM 上的async 库提供了许多用于管理异步操作的实用函数。这与语言中的 async 关键字非常不同,后者允许您将 await 与 promises 一起使用。这些就像猫和狗。它们都与异步编程有关,但除此之外,它们根本不是一回事。

例如,假设您需要向特定主机发出 1000 个单独的请求,但由于各种原因(内存消耗、主机速率限制等...),您的目标请求不能超过 5 个主机在任何给定时间飞行。因此,您想要启动 5 个请求,然后每次完成一个请求,您将启动另一个请求,直到您最终完成所有 1000 个请求。

ES7 中的 async 关键字也许可以用在一些自定义代码中来实现我上面描述的算法,但它本身并不能为您提供该解决方案。

而来自 NPM 的 async 库在其工具包中有一个特定的功能,可以完全按照我的描述进行操作。它称为 parallelLimit(),它允许您准确指定一次要并行执行的操作数(最多不超过此数)。事实上,async 库包含各种用于管理异步控制流的实用函数,您可以在此处查看它们的完整列表:https://caolan.github.io/async/v3/docs.html#parallelLimit .

现在我们在语言中有了 async 关键字,不再需要其中的一些算法,因为在纯 ES7 中编写它们非常容易。例如,如果你想一次迭代一个数组,对每个项目调用一个异步函数,你可以只使用 for 循环和 await,都在一个async 函数。

async function run() {
for (let x of myArray) {
await doSomeAsyncOperation(x);
}
}

在我们在 ES7 中使用 asyncawait 之前,您将不得不编写一些自定义代码来执行此异步、序列化迭代,或者您将使用来自库(例如 async 库)的预构建函数。

总结

回顾一下,async 库包含许多用于管理异步操作的实用函数。其中一些不再是必需的,因为 asyncawait 在 ES7 中提供了控制流选项,有些甚至在 async 存在的情况下仍然有用/有用await

仅供引用,async 库最初是在我们在 Javascript 中使用 promises 和 async/await 之前开发的,它处理使用普通回调的旧式异步操作表示完成或错误,并提供用于管理它们的实用程序。 Promises 和 async/await 已经取代了对 async 库中某些功能的需求,但不是全部。

When to use 'async' built-in for ES2017 or import 'npm i async'

使用ES7内置的async/await,直接简单的解决了你要解决的异步控制流问题。当您无法仅使用 async/await 轻松解决问题时,请使用 async 库中的函数,而 async 库包含可直接解决您的问题的预构建函数很简单。

因此,async 库只是 NPM 上数十万个库中的一个。当它包含的东西比语言中已经内置的东西更能帮助你解决工作时,你就可以使用它,这与何时使用 NPM 中的任何其他模块的逻辑相同。

关于javascript - 何时使用 ES2017 内置的 'async' 或导入 'npm i async',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70389199/

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