在node.js中使用async模块

时间:2016-06-11 01:21:08

标签: javascript node.js asynchronous

我知道这个async module,每个人都在谈论它。我知道下面的代码将在2 db调用完成后触发回调。

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

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

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之后运行。那么为什么要使用异步模块呢?只是为了让代码更具可读性吗?

1 个答案:

答案 0 :(得分:1)

  

那么为什么要使用异步模块呢?只是为了让代码更具可读性吗?

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

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

因此,您可以使用Promise API创建vanilla代码解决方案,甚至可以更简单地使用未来ECMAScript规范中的async / await,但是这个库可以省去重复这一点的麻烦你出现上述问题的时间。