javascript - 在node.js中使用async模块

标签 javascript node.js asynchronous

我知道了这个async module ,每个人都在谈论它。据我所知,下面的代码将在 2 个数据库调用完成时触发回调。

async.parallel([
    function(){ dbcall() },
    function(){ dbcall() }
], callback);

但是必须使用异步模块吗?如果我正确包装我的代码,它也可以是异步的。就像我在 Controller 中写的一样

var Token = require('../models/token');
Token.getAllTokens(owner, function(err,callback){
    var device_tokens = callback.token;
    GCM_call(device_tokens); //another ajax call
  });

上面的代码可以工作,我测试过,GCM_call将在getAllTokens之后等待并运行。那么为什么要使用异步模块呢?只是为了让代码更具可读性吗?

最佳答案

So why use async module? is it just to make the code more readable?

在某种程度上,是的,为了使其更具可读性。它提供了一些有用的实用程序来编写更具可读性和更高性能的代码。

但最重要的是,因为它解决了使用异步功能时的一些常见问题。您正在展示一个使用单个回调的示例,其中第一个代码块中的异步模块示例首先等待一些异步内容完成,然后调用回调函数。你会如何用 vanilla js 解决这个问题?如果您了解 Promise API,您可能会说 Promise.all([promise1, promise2, ...])。但是,当您想使用像 async.series 这样一次只能运行一个任务的东西时该怎么办?在这种情况下,您经常会看到被破解的解决方案,这被称为“回调 hell ”,其中回调嵌套在另一个中。

因此,您可以使用 Promise API 创建普通代码解决方案,甚至可以通过添加 future ECMAScript 规范中的 async/await 来创建更简单的代码解决方案,但是这个库可以让您免去每次出现上述问题时重复此操作的麻烦。

关于javascript - 在node.js中使用async模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759065/

相关文章:

node.js - 使用 fs.readFile 从外部 URL 获取文件

asp.net - 脑筋急转弯: IAsyncResult AsyncState is null after callback in Async ASP .网页

c# - 如何使异步方法返回值?

javascript - 为什么这个 getElementById 函数不起作用?

javascript - 缩放 div 文本并将其显示在 block 上(onClick 并使用 Javascript)

javascript - 相邻的 JSX 元素必须包含在图像的封闭标签中吗?

javascript - 从 Node Express api 返回大型 json 响应

javascript - JQuery 中的选项卡创建菜单

node.js - Mongoose 的 typescript 声明文件

c# - 任务并行库 - Task.Delay() 用法