Node.js链式回调

由于异步的关系,代码的书写顺序可能和执行顺序并不一样,可能想先执行A再执行B,但由于异步可能B要先于A执行.例如在OC中使用AFnetworking请求数据然后刷新页面,由于网络请求是用block实现的异步方法,所以刷新的时候并没有数据,为了解决这个问题,一般会在请求响应结束在block中刷新页面(这就回出现循环引用的问题,不过node中不会出现).

上面是OC中异步执行中的链式回调,在node.js中也是使用这样的方法在回调中调用方法来实现链式回调。

function logCar(car,callback)
{
    console.log("Saw a %s",car);
    process.nextTick(callback);
}
function logCars(cars)
{
    var car=cars.pop();
    if (cars.length)
    {
      logCar(car,function(){
        logCars(cars);;
      });
    }
}
var cars = ["Ferrari", "Porsche", "Bugatti",
  "Lamborghini", "Aston Martin"];
logCars(cars);
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe callback_chain.js
Saw a Aston Martin
Saw a Lamborghini
Saw a Bugatti
Saw a Porsche

Process finished with exit code 0

node.js自学阶段总结:

从之前到现在的几篇博客算是把Node.js中基础的语法整理理解了一下,这些算是为以后的打的基础.下面要学的Buffer、Stream为文件模块、Http、套接字等打下基础,算是循序渐进吧.后面的大部分都是熟悉接口的一些应用,今天看了下Buffer、Stream和文件部分,都是Node.js的一些API的使用,理解方面也不算太难理解,主要还是这几天的一些node.js的模型、运行机制以及js的面向对象、回调的比较不好理解。

时间: 2024-10-04 15:51:17

Node.js链式回调的相关文章

node.js如何使用回调

Node.js到处使用回调,尤其在有I/O(输入/输出)操作的地方. 下面是在一个Node.js中使用filesystem模块中从磁盘上读入文件内容示例一: var fs = require('fs'); fs.redFile('somefile.txt', 'urf8', function (err, data) { if (err throw err); console.log(data); }); 以下是所发生的事情: 1.fs(filesystem)模块被请求,以便在脚本中使用 2.将文

文件上传以及JS链式结构

文件上传: 文件上传使用FileUpload控件,使用控件的SaveAs方法,需要绝对路径. 获取文件的绝对路径:Server.MapPath(相对路径); 或许要上传文件的本身名字用.FileName获取. 因为名字相同的文件将会被直接覆盖,所以一般文件名字要拼接上传时间和用户名保证不重名. 上传文件默认最大为4MB,在C#端限制文件大小有缺陷,一般用JS端限制. 获取要上传的文件通过ID获取FileUpload控件然后通过value值获取文件然后通过.length属性确定是否有文件要上传,然

node.js中的回调

同步和阻塞:这两个术语可以互换使用,指的是代码的执行会在函数返回之前停止.如果某个操作阻塞,那么脚本就无法继续,这意味着必须等待. 异步和非阻塞:这两个术语可以互换使用,指的是基于回调的.允许脚本并行执行操作的方法.脚本无需等待某个操作的结果才能继续前进,因为操作结果会在事件发生时由回调来处理.使用异步方法,操作无需一个接一个地发生(自己注:就是并行了). @1 同步和阻塞的例子: function sleep(milliseconds) { var start = new Date().get

node.js 异步式I/O 与事件驱动

Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元. 阻塞与线程什么是阻塞(block)呢?线程在执行中如果遇到磁盘读写或网络通信(统称为 I/O 操作),通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU 控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为 阻塞.当 I/O 操作完毕时,操作系

node.js异步控制流程 回调,事件,promise和async/await

写这个问题是因为最近看到一些初学者用回调用的不亦乐乎,最后代码左调来又调去很不直观. 首先上结论:推荐使用async/await或者co/yield,其次是promise,再次是事件,回调不要使用. 接下来是解析,为什么我会有这样的结论 首先是回调,理解上最简单,就是我把任务分配出去,当你执行完了我就能从你那里拿到结果执行相应的回调, 这里演示一个对setTimeout的封装,规定时间后打印相应结果并执行回调函数 并且这个函数传给回调函数的参数符合node标准,第一个为error信息,如果出错e

Node.js 异步式 I/O 与事件驱动实战

简介 Node.js 最大的特点就是采用异步 I/O 与事件驱动的架构设计.对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑模块提供一个系统线程,通过系统线程切换来弥补同步式 I/O 调用时的时间开销.Node.js 使用的是单线程模型,对于所有 I/O 都采用异步式的请求方式,避免了频繁的上下文切换.Node.js 在执行过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理. 概念 同步调

JS 链式调用

<!-- ————————JS函数链式调用——————— --> function Dog(){ this.run=function(){ alert("跑"); return this; }; this.eat=function(){ alert("吃"); return this; }; this.sleep=function(){ alert("睡觉"); return this; }; } var dog=new Dog();

js链式调用

我们都很熟悉jQuery了,只能jQuery中一种非常牛逼的写法叫链式操作 * $('#div').css('background','#ccc').removeClass('box').stop().animate({width:300}) 那这是如何实现的呢,我自己写了个例子:并非jQuery源码 Ferrinte.prototype.show=function () { for(var i=0;i<this.elements.length;i++) { this.elements[i].s

Promise链式回调的使用

/*Promise通常配合then方法来链式的使用,then方法里面第一个回调函数表示成功状态,也就是resolve,第二个是失败状态-reject,如果默认写一个参数的话,默认resolve*/ let checkLogin=()=> { return new Promise((resolve,reject)=>{ let flag=document.cookie.indexOf("userId")!=-1?true:false; if(flag=true){ resol