nodejs设计思想杂技二 callback 模式
2016-07-05 23:03
801 查看
回调。。。。与return
回调函数如何替代return的功能?
同步的函数
function add(a, b) {
return a + b;
}
异步的函数
function add(a, b, callback) {
callback(a + b);
}
同步的函数执行后return
异步的函数执行完将结果放入callback中
同步函数的 执行过程是立即执行,异步函数如上一章所述。
一个闭包。
同步改异步
同步的代码
var fs = require('fs');
var cache = {};
function consistentReadSync(filename) {
if(cache[filename]) {
return cache[filename];
} else {
cache[filename] = fs.readFileSync(filename, 'utf8');
return cache[filename];
}}
异步的代码
var fs = require('fs');
var cache = {};
function consistentReadAsync(filename, callback) {
if(cache[filename]) {
process.nextTick(function() {
callback(cache[filename]);
});
} else {
//asynchronous function
fs.readFile(filename, 'utf8', function(err, data) {
cache[filename] = data;
callback(data);
});
}
}
用nexttick将函数放在event queue的top,下次event loop执行时第一个就是他
setImmediate()将函数放在event queue的底部,不会像nexttick那样可能会把别人饿死。。。
欢迎加q群243153894交流
回调函数如何替代return的功能?
同步的函数
function add(a, b) {
return a + b;
}
异步的函数
function add(a, b, callback) {
callback(a + b);
}
同步的函数执行后return
异步的函数执行完将结果放入callback中
同步函数的 执行过程是立即执行,异步函数如上一章所述。
一个闭包。
同步改异步
同步的代码
var fs = require('fs');
var cache = {};
function consistentReadSync(filename) {
if(cache[filename]) {
return cache[filename];
} else {
cache[filename] = fs.readFileSync(filename, 'utf8');
return cache[filename];
}}
异步的代码
var fs = require('fs');
var cache = {};
function consistentReadAsync(filename, callback) {
if(cache[filename]) {
process.nextTick(function() {
callback(cache[filename]);
});
} else {
//asynchronous function
fs.readFile(filename, 'utf8', function(err, data) {
cache[filename] = data;
callback(data);
});
}
}
用nexttick将函数放在event queue的top,下次event loop执行时第一个就是他
setImmediate()将函数放在event queue的底部,不会像nexttick那样可能会把别人饿死。。。
欢迎加q群243153894交流
相关文章推荐
- 使用ruby部署工具mina快速部署nodejs应用教程
- 快速掌握Node.js环境的安装与运行方法
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行
- nodejs中的fiber(纤程)库详解
- Windows系统下Node.js的简单入门教程
- 在Node.js应用中使用Redis的方法简介
- 基于NodeJS的前后端分离的思考与实践(五)多终端适配
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- 在Ubuntu系统上安装Ghost博客平台的教程
- Node.js编程中客户端Session的使用详解
- 使用Raygun对Node.js应用进行错误处理的方法
- 实例详解Nodejs 保存 payload 发送过来的文件
- 在Mac OS下使用Node.js的简单教程
- 我的NodeJs学习小结(一)
- Node.js 应用跑得更快 10 个技巧
- nodejs中实现sleep功能实例
- Node.js环境下编写爬虫爬取维基百科内容的实例分享