nodejs 代码设计模式1:同步函数变异步
同步函数变异步
1 问题:
1.1 碰到需要调用你刚正在创建的对像。
function createServer(data, cb) {
data.num = 1;
cb();
return data;
}
const test = {};
let data = createServer(test, function() {
console.log(data.num);// 调用你创建的对像
});
这时会报错Cannot read property 'num' of undefined
。
因为回调函数调用时data对象还没有赋值,所以会报错。
1.2 自己写函数时,需要一个回调函数,你希望是异步,但是实际是同步。
function foo(s,cb){
console.log(s);
cb();
}
foo("run1",function() {
console.log("callback");// 你希望这里的函数异步,在run后面输出,实际上这里在还是同步,没有达到效果。
})
console.log("run2");
2 解决方案
在nodejs中创一个异步的函数的调用方法有三种: setTimeout
,setImmediate
,process.nextTick
第一个问题解决方案:
function createServer(data, cb) {
data.num = 1;
process.nextTick(cb);
// or setImmediate(cb);
// or setTimeout(()=> cb(),0);
return data;
}
const test = {};
let data = createServer(test, function() {
console.log(data.num);// 调用你创建的对像
});
第二个问题解决方案:
function foo(s,cb){
console.log(s);
process.nextTick(cb);
// or setImmediate(cb);
// or setTimeout(()=> cb(),0);
}
foo("run1",function() {
console.log("callback");// 你希望这里的函数异步,在run后面输出,实际上这里在还是同步,没有达到效果。
})
console.log("run2");
3 总结
在nodejs中,就三个方法可以使调用变成异步: setTimeout
,setImmediate
,process.nextTick
,你直接使用process.nextTick
就没有问题。
nodejs 代码设计模式1:同步函数变异步的更多相关文章
- JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this
JAVA之旅(十三)--线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this 我们继续上个篇幅接着讲线程的知识点 一.线程的安全性 当我们开启四个窗口(线程 ...
- OC 线程操作 - GCD使用 -同步函数,异步函数,串行队列,并发队列
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // GCD 开几条线程并不是我们 ...
- 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一
在C++中有2种类型的线程:UI Thread和Worker Thread,前者是基于用户界面的有消息循环的线程.后者是没有用户界面的侧重于大时空运算的线程.直接调用Windows相关线程及同步对象的 ...
- java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁
1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数 ...
- Win32线程安全问题.同步函数
线程安全问题.同步函数 一丶简介什么是线程安全 通过上面几讲.我们知道了线程怎么创建.线程切换的原理(CONTEXT结构) 每个线程在切换的时候都有自己的堆栈. 但是这样会有安全问题. 为什么? 我 ...
- 异步nodejs代码的同步样子写法样例
异步nodejs代码的同步样子写法样例 js的异步嵌套太深代码将不好看.尤其在用node的时候这种情况会大量出现. 这里用node连接redis,做一个用户注册的简单例子来说明.例如用redis做存储 ...
- js eventLoop (使用chunk 同步变异步)
https://www.cnblogs.com/xiaohuochai/p/8527618.html 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与 ...
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
随机推荐
- UVa 10179 - Irreducable Basic Fractions
题目大意:给一个正整数n,求出在[1, n]区间内和n互质的正整数的个数.Euler's Totient(欧拉函数)的直接应用. #include <cstdio> #include &l ...
- 搭建NDK环境
2014.07.14 搭建OK,但是目前只能手动编译c代码,具体不清楚.
- 自己动手做聊天机器人 二十九-重磅:近1GB的三千万聊天语料供出
Reference: http://www.shareditor.com/blogshow/?blogId=112 经过半个月的倾力打造,建设好的聊天语料库包含三千多万条简体中文高质量聊天语料,近1G ...
- UVa 10670 - Work Reduction
题目大意:对n份文件进行处理使其减少到m份,有l个机构可供选择.每个机构提供两种方案:每减少一份收费a元,或者减少到文件数量的一半收费b元.根据各个机构收取费用进行排序. 很直接的题目,直接进行模拟就 ...
- 史上最全的css hack(ie6-9,firefox,chrome,opera,safari)
<!DOCTYPE html> <html> <head> <title>Css Hack</title> <style> #t ...
- js如何准确获取当前页面url网址信息
1.window.location.href(设置或获取整个 URL 为字符串) var test = window.location.href;alert(test);返回:http://i.cnb ...
- Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问
功能说明:admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能提升.适用版本:Discuz!x1-x3.2具体实施方案: a ...
- Unity基础学习-Unity概述
Unity 概述 Unity是一个强大的引擎,里面包括大量的工具用来满足各种各样的需求.Unity的编辑器是直观的可定制的,让您在您的工作流中有较大的自由度. 本小节是开始学习Unity的关键部分.里 ...
- Flink架构、原理与部署测试
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...
- 数据结构实习-迷宫(基于Qt实现)
预览效果: Maze.pro文件 #------------------------------------------------- # # Project created by QtCreator ...