`
start_p
  • 浏览: 66529 次
  • 性别: 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开发-Node.js入门.pdf

    Node.js 维护一个事件队列,需执行的每个任务都会加入事件队列,并提供一个包含处理结果的回调函数。 Node.js 的应用场合包括: * 实时数据处理 * 高性能 Web 应用程序 * 数据分析和科学计算 * 实时通信和游戏...

    Node.js By Example

    1. **事件驱动编程**:Node.js采用事件驱动模型,当有I/O操作时,不会阻塞主线程,而是通过回调函数处理。这种设计使得Node.js能够处理大量的并发请求,适合构建高并发的服务器端应用。 2. **V8引擎**:Node.js使用...

    Node.js 回调函数实例详解

    在Node.js中,回调函数通常用于处理异步操作的结果,如文件系统操作、网络请求等。Node.js中的大部分API都是基于回调机制设计的,这允许用户执行一个操作的同时,让Node.js继续处理其他事务,而不是等待当前操作完成...

    node.js最新手册

    1. **事件驱动编程**:Node.js的核心就是事件循环和回调函数,理解如何处理异步操作是学习Node.js的基础。 2. **模块系统**:Node.js使用模块化设计,每个`.js`文件都可以视为一个模块,通过`require`和`exports`或`...

    node.js实战 pdf+源码

    通过回调函数、Promise和async/await等机制,开发者可以处理大量并发请求,避免了传统的多线程模型中的上下文切换开销。 3. **事件循环**:Node.js采用单线程的事件循环模型,当一个任务执行完毕后,会触发下一个...

    《Node入门一本全面地Node.js教程》PDF

    - **回调函数**:Node.js中的异步操作通常通过回调函数实现,但过度使用可能导致回调地狱问题。 - **Promise**:Promise是解决回调地狱的工具,提供了链式调用和错误处理机制。 - **async/await**:基于Promise的...

    Node.js-StuQ分享专题《深入浅出jsNode.js异步流程控制》完整版

    在Node.js中,异步处理主要通过回调函数、事件循环、Promise和async/await等机制实现。 1. **回调函数**:在早期的Node.js开发中,回调是最常见的异步处理方式。当一个操作完成时,会调用预先定义好的函数,以处理...

    Node.js-worker-threads-pool轻松管理Node.js工作线程池

    `execute` 方法接收两个参数:一个是任务数据,另一个是回调函数,用于处理工作线程执行完毕后的结果或错误。 当不再需要线程池时,记得要关闭它以释放资源: ```javascript pool.terminateAll(() => { console....

    pdf版,Node.js开发实战详解

    书中会详细解释这种异步编程模型,并通过实例演示如何编写异步代码,如使用回调函数、Promise以及现代的async/await语法。 再者,书中的实战部分可能涵盖创建基本的HTTP服务器、搭建RESTful API、处理路由、中间件...

    Node.js-Doodoo.js--中文最佳实践Node.jsWeb快速开发框架支持Koa.js中间件

    Koa.js 是由 Express.js 的创建者开发的下一代 web 开发框架,它摒弃了传统的回调函数,而是采用 ES6 的异步函数(async/await)来处理请求。Koa.js 的核心是中间件机制,这种机制允许开发者以洋葱模型的方式串联多...

    Node.js-深入理解Node.js核心思想与源码分析

    它使用回调函数来处理异步操作,使得程序能够快速响应并保持高效率。 2. 非阻塞I/O:Node.js利用libuv库实现跨平台的非阻塞I/O操作,极大地提高了性能,尤其在处理大量I/O密集型任务时表现优异。 3. 模块化设计:...

    node.js源码 node-v21.0.0.tar.gz

    9. **异步编程**:Node.js主要采用回调函数、Promise和async/await进行异步编程,这些机制帮助开发者处理复杂的异步流程,避免回调地狱。 10. **性能监控**:Node.js提供了如`process`对象,可以获取CPU使用率、...

    Node.js初级+进阶

    Node.js的异步I/O是通过回调函数来实现的,避免了阻塞主线程,提高了程序的运行效率。`fs`模块提供了文件系统的异步操作API,如`fs.readFile()`和`fs.writeFile()`等,用于读写文件,这些方法都接受一个回调函数作为...

    Node.js-一个用于自动获取支付宝账单信息的Node.js模块

    它们简化了处理GET、POST等HTTP方法的流程,支持Promise和异步/回调函数,使得代码更易读、更易于管理。 在压缩包文件名“alipay-bills-master”中,“master”通常代表这是项目的主分支,通常是最稳定、最新的版本...

    Node.js入门经典 源代码

    1. 异步编程:Node.js主要依赖回调函数进行异步编程,但这种模式可能导致回调地狱。后来引入了Promise和async/await,使得异步代码更易读、更易于管理。 2. 模块系统:Node.js使用CommonJS规范,通过require导入模块...

    node.js初步简介

    而在异步方式中,主进程立即释放控制权,当查询结果返回时,才执行回调函数中的逻辑。 #### 六、总结 Node.js作为一种先进的服务器端技术,通过其独特的非阻塞I/O模型和事件驱动架构,解决了传统服务器面临的诸多...

    Node.js windows 安装文件

    - **事件驱动**:Node.js的核心特性之一是其事件驱动模型,利用回调函数处理异步操作,提高了非阻塞I/O的效率。 - **V8引擎**:Node.js使用Google的V8 JavaScript引擎,使得JavaScript代码能以接近原生速度运行。 ...

    Node.js-[全文]如何正确的学习Node.js

    因此,学习Node.js需要掌握异步编程的概念,理解回调函数、Promise和async/await的用法。 接着,你需要熟悉Node.js的核心模块,如fs(文件系统)模块用于读写文件,http模块用于创建HTTP服务器,path模块用于处理...

Global site tag (gtag.js) - Google Analytics