何时使用 ES2017 内置的 'async' 或导入 'npm i async'
When to use 'async' built-in for ES2017 or import 'npm i async'
我最近了解到 async/await 内置于 ES2017 中,但我已经做了几个项目,我需要需要包 async 才能使用 async/await.
有什么简单的方法可以告诉我什么时候可以正常访问异步或者什么时候需要导入它?我需要使用那个 npm 包吗?如果现在语言中内置了完全相同的功能,异步包(目前显示每周下载量为 47,469,002 次)的目的是什么?
对于需要异步的示例项目,请随时查看 MDN 上的 Local-Library MongoDB/Express/Node 教程项目。
由于这是一个 Express 应用程序(我自己的几个应用程序也是),这与 ExpressJS 有什么关系吗?
我环顾四周试图找到这些答案,但一无所获。感谢任何帮助理解这一点。
NPM 上的 async
库提供了许多用于管理异步操作的实用函数。这与允许您将 await
与承诺一起使用的语言中的 async
关键字非常不同。这些就像猫和狗。它们都与异步编程有关,但除此之外,它们根本不是一回事。
例如,假设您需要向特定主机发出 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 中使用 async
和 await
之前,您将不得不编写一些自定义代码来执行此异步、序列化迭代,或者您将使用预构建函数来自图书馆,例如 async
图书馆。
总结
回顾一下,async
库包含许多用于管理异步操作的实用函数。其中一些不再是必需的,因为 async
和 await
在 ES7 中提供了控制流选项,有些仍然是 helpful/useful 即使存在 async
和 await
.
仅供参考,async
库最初是在我们在 Javascript 中获得承诺和 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
库只是 NPM 上数十万个库中的一个。当它包含的东西比语言中已经内置的东西更能帮助你解决工作时,你就可以使用它,这与何时使用 NPM 中的任何其他模块的逻辑相同。
aysnc/await 是 ES2017 的一部分,通过避免承诺链来实现更简洁的风格。请参阅 mdn 中提到的以下示例。您避免像 then, catch 这样的承诺链,但具有异步行为
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
你提到的异步库更像是一个实用程序(它们主要设计用于节点 js),它接受回调数组,执行并包装它们并给你一个承诺。 Iy 还为您提供了更多功能,例如,如果您想并行调用回调、串行调用回调、链接回调,可以通过常见的 success/error 处理
帮助跟踪这些回调
我最近了解到 async/await 内置于 ES2017 中,但我已经做了几个项目,我需要需要包 async 才能使用 async/await.
有什么简单的方法可以告诉我什么时候可以正常访问异步或者什么时候需要导入它?我需要使用那个 npm 包吗?如果现在语言中内置了完全相同的功能,异步包(目前显示每周下载量为 47,469,002 次)的目的是什么?
对于需要异步的示例项目,请随时查看 MDN 上的 Local-Library MongoDB/Express/Node 教程项目。
由于这是一个 Express 应用程序(我自己的几个应用程序也是),这与 ExpressJS 有什么关系吗?
我环顾四周试图找到这些答案,但一无所获。感谢任何帮助理解这一点。
NPM 上的 async
库提供了许多用于管理异步操作的实用函数。这与允许您将 await
与承诺一起使用的语言中的 async
关键字非常不同。这些就像猫和狗。它们都与异步编程有关,但除此之外,它们根本不是一回事。
例如,假设您需要向特定主机发出 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 中使用 async
和 await
之前,您将不得不编写一些自定义代码来执行此异步、序列化迭代,或者您将使用预构建函数来自图书馆,例如 async
图书馆。
总结
回顾一下,async
库包含许多用于管理异步操作的实用函数。其中一些不再是必需的,因为 async
和 await
在 ES7 中提供了控制流选项,有些仍然是 helpful/useful 即使存在 async
和 await
.
仅供参考,async
库最初是在我们在 Javascript 中获得承诺和 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
库只是 NPM 上数十万个库中的一个。当它包含的东西比语言中已经内置的东西更能帮助你解决工作时,你就可以使用它,这与何时使用 NPM 中的任何其他模块的逻辑相同。
aysnc/await 是 ES2017 的一部分,通过避免承诺链来实现更简洁的风格。请参阅 mdn 中提到的以下示例。您避免像 then, catch 这样的承诺链,但具有异步行为 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
你提到的异步库更像是一个实用程序(它们主要设计用于节点 js),它接受回调数组,执行并包装它们并给你一个承诺。 Iy 还为您提供了更多功能,例如,如果您想并行调用回调、串行调用回调、链接回调,可以通过常见的 success/error 处理
帮助跟踪这些回调