`
start_p
  • 浏览: 65299 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

node.js如何返回回调函数的结果

阅读更多

    在node.js开发过程中会遇到层层回调,虽然回调是node.js的优势所在,但同样也是坑。有如下场景需要返回多层回调函数中的结果:

代码1

http.request("/url", function(res){
     obj.get(res, function(res2){
          obj.get(res2,function(res3){
                  //此处可以得到res3
           });
     });
   console.log('结束');
});

假如有一个函数var func1 = function(){

      //在这里会用到上面的那段代码

}

像这样:

代码2:

router.get('url', function(req, res){
      http.request("/url", function(res1){
        obj.get(res, function(res2){
              obj.get(res2,function(res3){
                 //得到res3后传值到页面
                 res.render('html',{res:res3})
              });
         });
    });

});

 如果我们有多个路由都需要用到那段代码的返回值,我们或许会把它提取出来当做一个公共的部分来使用,于是把它放到一个函数中:

代码3

var func2= function(){
         http.request("/url", function(res){
             obj.get(res, function(res2){
                   obj.get(res2,function(res3){
                       //在此处返回得到的值
                       returen res3;
                   });
              });
         console.log('结束');
     });
}

 然后在每个路由中调用,可是结果却出人意料,在调用func2()以后并没有得到想要的结果res3,事实上已经输出了“结束”两字。

    其实这就是node.js的异步回调导致的结果,整个代码段走完了,回调函数中的值却没有返回。那该怎么办?解决办法还是用回调解决,将代码3改写:

代码4

var func2= function(param, callback){
         http.request("/url", function(res){
             obj.get(res, function(res2){
                   obj.get(res2,function(res3){
                      callback(res3);
                   });
              });
         console.log('结束');
     });
}

 接下来就是调用代码4:

router.get("url", function(req, res){

     func2(p1, function(res2){

         res.render("html", {res:res2})  

    })

 

})

1
0
分享到:
评论

相关推荐

    Node.js 开发指南.pdf

    3.2.2 回调函数 31 3.2.3 事件 33 3.3 模块和包 34 3.3.1 什么是模块 35 3.3.2 创建及加载模块 35 3.3.3 创建包 38 3.3.4 Node.js包管理器 41 3.4 调试 45 3.4.1 命令行调试 45 3.4.2 远程调试 ...

    Node.js 回调函数实例详解

    主要介绍了Node.js 回调函数实例详解的相关资料,需要的朋友可以参考下

    node.js回调函数之阻塞调用与非阻塞调用

    首先,node.js作为javascript运行平台,它采用了事件驱动和异步编程的方式,通过事件注册和异步函数,开发人员可以提高资源利用率,服务器的性能也能得到改善。其次,对于前端人来说,node.js作为js的运行平台,我们...

    Node.js 高级编程

    Node.js是一种主流框架,它允许你使用JavaScript快速构建具有高度可伸缩性的网络程序。可是,它有自己的学习曲线,这本较为深入的指南性图书首先介绍了Node.js平台的安装,然后重点关注:创建和加载模块;使用缓冲区...

    Node.js+开发指南

    3.2.2 回调函数 31 3.2.3 事件 33 3.3 模块和包 34 3.3.1 什么是模块 35 3.3.2 创建及加载模块 35 3.3.3 创建包 38 3.3.4 Node.js包管理器 41 3.4 调试 45 3.4.1 命令行调试 45 3.4.2 ...

    Node.js MongoDB AngularJSWeb开发中文版.part1

    4.3.1 向回调函数传递额外的参数 63 4.3.2 在回调中实现闭包 64 4.3.3 链式回调 65 4.4 小结 66 4.5 下一章 66 第5章 在Node.js中处理数据I/O 67 5.1 处理JSON 67 5.1.1 把JSON转换成JavaScript对象 67 5.1.2 把...

    深入理解Node.js 事件循环和回调函数

    主要介绍了深入理解Node.js 事件循环和回调函数,详细的介绍Node.js 事件循环和Node.js回调函数,需要学习的可以参考一下。

    node.js实现回调的方法示例

    向回调函数传递额外的参数 在调用函数中,使用匿名函数中实现需传递的参数,再次匿名函数内调用回调函数。 var events = require(events); function CarShow() { events.EventEmitter.call(this); this.seeCar = ...

    node-style-guide, node 程序员的node.js 风格指南.zip

    node-style-guide, node 程序员的node.js 风格指南 使用 DocToc 生成的内容 表参考资料类型对象数组字符串函数属性变量需要回调函数尝试捕获提升条件表达式&相等性代码块注释空格逗号分号作为语句块的结束类型转换&...

    Beginning Node.js

    你回想一下,在给前端写javascript的时候,更多时候你都是在搞事件处理和回调函数。javascript本身就是给事件处理量身定制的语言。 作者:厂长 链接:https://www.zhihu.com/question/33578075/answer/56951771 ...

    Node.js入门(中文版)

    基于事件驱动的回调 ...................................... 11 服务器是如何处理请求的 .................................... 12 服务端的模块放在哪里 ..................................... 12 如何来...

    Node.js异步错误处理LAEH2.zip

    LAEH2 会存储回调线程的堆栈轨迹,这个堆栈轨迹会附加到回调中的主异常堆栈轨迹中,或者是把错误用异步函数进行回调。 LAEH2 会缩小显示堆栈轨迹,用可选选项隐藏 laeh2.js 框架本身和 Node.js 核心库文件;为减少...

    基于node.js的文件管理系统源码.zip

    基于node.js的文件管理系统源码.zipNode.js 提供一组可用于与文件系统进行交互(以类似于标准 POSIX 函数的方式)的模块 fs 。 使用方式: const fs = require('fs'); 所有的文件系统操作都具有同步的、回调的、...

    Node.js高级编程

    Node.js是一种主流框架,它允许你使用JavaScript快速构建具有高度可伸缩性的网络程序。可是,它有自己的学习曲线,这本较为深入的指南性图书首先介绍了Node.js平台的安装,然后重点关注:创建和加载模块;使用缓冲区...

    快速掌握Node.js中setTimeout和setInterval的使用方法

    Node.js和js一样也有计时器,超时计时器、间隔计时器、及时计时器,它们以及process....当调用setTime()时回调函数会在delayMillSeconds后 执行.setTime() 会返回一个定时器对象ID,可以在delayMillSeconds到期前将ID传

    详解node.js 事件循环

    Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. 事件驱动程序 Node.js 使用事件驱动模型,当web server接收到...

Global site tag (gtag.js) - Google Analytics