nodejs Async 使用方法(解决多层回调嵌套)

由于nodejs是异步处理的,有时我们想同步从mysql里取出数据,最后在处理逻辑 就需要用到此扩展;

此扩展可以避免多层回调;

安装方法:

npm install async

使用方法:

1、parallel 多个函数并行执行

 1 var Async = require(‘async‘);
 2
 3 Async.parallel(
 4     [
 5         function(callback){
 6             // 此处查询数据库代码
 7             DaoUser.getUserByID(userId, function(err, user) {
 8                 callback(err, user);
 9             });
10         },
11         function(callback){
12             // 此处查询数据库代码
13             DaoUser.getTotal(callback, function(err, count){
14                 callback(err, count);
15             });
16         }
17         // 如果还需要查询数据 继续添加方法即可
18     ],
19     function(err, results){
20         var user = results[0];
21         var count = results[1];
22     }
23 );

2、waterfall 多个方法依次执行,前一个函数的返回值可以传递给下一个函数

 1 var Async = require(‘async‘);
 2
 3 Async.waterfall([
 4     function(callback) {
 5         DaoUser.getUserIdByName(uName, function(err, userId) {
 6             callback(null, userId);
 7         });
 8     },
 9     function(userId, callback) {
10         DaoTask.getDateByUid(userId, function(err, tasks) {
11             callback(null, tasks);
12         });
13     }
14 ], function(err, result) {
15     var tasks = result;
16 });
时间: 2024-10-26 14:01:07

nodejs Async 使用方法(解决多层回调嵌套)的相关文章

多层 iframe 嵌套 js 方法调用

一下午一个这破问题,浪费了不少时间,怎么也实现不了我的上上级iframe 刷新.NND. 实现了,记录一下下吧: window.parent.parent.document.getElementById("content_frame").contentWindow.location.reload(); window.parent.parent.document.getElementById("content_frame").js方法. 多层 iframe 嵌套 js

避免多层回调,Node.js异步模块Async初使用

原来写的一个分页查询,回调了好几层. exports.list = function(req,res) { var params = {}; var current_page = common_util.get_param_value(req,'current_page','Number',1); var page_size = common_util.get_param_value(req,'page_size','Number',10); var start_index = common_u

避免多层回调,Node.js异步库Async使用(series)

未使用Async之前coffeescript写的代码: exports.product_file_add = (req,res) -> if !req.param('file_id') return res.json({'flag':'error','msg':'请先上传文件再保存!'}) file_type = req.param('file_type') #判断产品和文件类型,限制上传的数量 params = {} params.product_code = req.param('produ

四种方法解决scrollview嵌套listview,listview高度确定问题

以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结构的原因.这个结构碰到的问题.几种解决方案和优缺点比较,这4个方面来为大家阐述.分析.总结. 实际上不光是ListView,其他继承自AbsListView的类也适用,包括ExpandableListView.GridView等等,为了方便说明,以下均用ListView来代表

Promise原理讲解 async+await应用(异步回调解决方案)

1.异步编程 1.1.回调函数 1.2 发布订阅 1.3 观察者模式 1.4 Promise 2.promise用法与原理 2.1 Promise.prototype.then() 2.2 Promise.prototype.catch() 2.3 Promise.all 2.4 Promise.race 2.5 Promise.resolve 2.6 Promise.reject 2.7 promise的一些扩展库 2.8 应用 async + await = generator + co 3

7种方法解决移动端Retina屏幕1px边框问题

在Reina(视网膜)屏幕的手机上,使用CSS设置的1px的边框实际会比视觉稿粗很多.在之前的项目中,UI告诉我说我们移动项目中的边框全部都变粗了,UI把他的设计稿跟我的屏幕截图跟我看,居然真的不一样.没有办法,只有在后面的版本中去修改了,但是要改的话,需要知道是为什么.所以查了很多资料,终于搞懂了这个问题,并且总结了几种方法. 造成边框变粗的原因 其实这个原因很简单,因为css中的1px并不等于移动设备的1px,这些由于不同的手机有不同的像素密度.在window对象中有一个devicePixe

jquery.Deferred promise解决异步回调

我们先来看一下编写AJAX编码经常遇到的几个问题: 1.由于AJAX是异步的,所有依赖AJAX返回结果的代码必需写在AJAX回调函数中.这就不可避免地形成了嵌套,ajax等异步操作越多,嵌套层次就会越深,代码可读性就会越差. $.ajax({ url: url, data: dataObject, success: function(){ console.log("I depend on ajax result."); }, error: function(){} }); consol

MVC 如何在一个同步方法(非async)方法中等待async方法

MVC 如何在一个同步方法(非async)方法中等待async方法 问题 首先,在ASP.NET MVC 环境下对async返回的Task执行Wait()会导致线程死锁.例: public ActionResult Asv2() { //dead lock var task = AssignValue2(); task.Wait(); return Content(_container); } private void Assign() { _container = "Hello World&q

ASP.NET MVC 如何在一个同步方法(非async)方法中等待async方法

问题 首先,在ASP.NET MVC 环境下对async返回的Task执行Wait()会导致线程死锁.例: public ActionResult Asv2() { //dead lock var task = AssignValue2(); task.Wait(); return Content(_container); } private void Assign() { _container = "Hello World"; } public async Task AssignVa