在node.js中使用异步模块
我了解了async module,大家都在谈论它。正如我所知,下面的代码将触发2db调用完成时的回调。在node.js中使用异步模块
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后运行。那么为什么要使用异步模块?只是为了让代码更具可读性?
那么为什么要使用异步模块?只是为了让代码更具可读性?
在某种程度上,是的,使它更具可读性。它提供了一些有用的工具来编写更具可读性和更高性能的代码。
但最重要的是,因为它解决了使用异步功能时的一些常见问题。您展示了一个使用单个回调的示例,其中第一个代码块中的异步模块示例首先等待某些异步内容完成,然后调用回调函数。你如何用香草js解决这个问题?如果您了解Promise API,则可能会说Promise.all([promise1, promise2, ...])
。但是当你想要使用像async.series
这样的应用程序时,只需要一次执行一个任务就可以做什么?在这种情况下,你经常会看到被破解的解决方案,它被称为回调地狱,其中回调嵌套到另一个。
所以,你可以创建一个使用无极API,甚至从未来的ECMAScript规范添加使用async
/await
简单的香草代码解决方案,但这个库是保存你这一点,你出现上述问题,每次重复的麻烦。
可以解决,只是使用回调的嵌套回调,可行的代码是丑陋的。 –
@AliciaBrandon我已经形容为回调地狱。它闻起来糟糕的设计。 Promise API可以在所有现代浏览器中运行,并且有许多polyfill和实用程序甚至可以将非promise API(例如节点fs)转换为Promises,所以没有理由创建回调地狱。 –
*“但是使用异步模块是必须的吗?”*一点都不。它提供了可以使多个异步调用更容易工作的帮助程序方法。 –