Promise模式编程链式调用中的一个小坑——匿名函数
2015-12-16 20:45
302 查看
又被一些没有完全理解的小坑给坑了。
上文书中记录到如果我想在Promise模式的编程中使用链式调用,且后续调用的传值是有赖于前面调用的执行结果的。本来以为这是一个很简单的事,谁知道这里是有坑的。
编程的期许是读取foo.txt文件后,如果有结果就继续读取foo2.txt文件,如果没有结果则再次读取foo.txt文件。
谁知道这段带码的执行结果是空的,啥也木有打印出来。然后我就发挥想象力,把那个readB函数的定义方法改了一下,一切执行就顺利了。果然坑就在这里。
究竟var readB=function
4000
(){…} 和 function readB(){….} 来定义函数有什么差别,我到chrome里去用如下代码打印了一下:
得到的结果是这样的:
function(data){
console.log(data)
}
function readA(data){
console.log(data)
}
看出来了吧,就这点差别。一个是匿名函数,一个不是。把匿名函数用这种方式添加到then中,就会有意想不到的结果。至于为啥,我也不知道。
上文书中记录到如果我想在Promise模式的编程中使用链式调用,且后续调用的传值是有赖于前面调用的执行结果的。本来以为这是一个很简单的事,谁知道这里是有坑的。
var Q=require('q'); var fs=require('fs'); var fs_readfile=Q.denodeify(fs.readFile); fs_readfile('foo.txt','utf-8') .then(readB).then(readB); var readB = function (data){ console.log(data) if(data)return fs_readfile('foo2.txt','utf-8') else return fs_readfile('foo.txt','utf-8') }
编程的期许是读取foo.txt文件后,如果有结果就继续读取foo2.txt文件,如果没有结果则再次读取foo.txt文件。
谁知道这段带码的执行结果是空的,啥也木有打印出来。然后我就发挥想象力,把那个readB函数的定义方法改了一下,一切执行就顺利了。果然坑就在这里。
var Q=require('q'); var fs=require('fs'); var fs_readfile=Q.denodeify(fs.readFile); fs_readfile('foo.txt','utf-8') .then(readB).then(readB); function readB (data){ console.log(data) if(data)return fs_readfile('foo2.txt','utf-8') else return fs_readfile('foo.txt','utf-8') }
究竟var readB=function
4000
(){…} 和 function readB(){….} 来定义函数有什么差别,我到chrome里去用如下代码打印了一下:
var readB = function (data){ console.log(data) } console.log(readB) function readA(data){ console.log(data) } console.log(readA)
得到的结果是这样的:
function(data){
console.log(data)
}
function readA(data){
console.log(data)
}
看出来了吧,就这点差别。一个是匿名函数,一个不是。把匿名函数用这种方式添加到then中,就会有意想不到的结果。至于为啥,我也不知道。
相关文章推荐
- 函数模块:CTVB_COMPARE_TABLES--两个表中删除/变更/粘贴分解
- 实战c++中的vector系列--使用vector构造二维数组
- 实战c++中的vector系列--使用vector构造二维数组
- Java学习笔记(IO_1)
- Spring-Boot-XML-Restful-Service
- 电子邮件发送-python
- 在eclipse中运行工程时 出现<ConnectionProperties> <PropertyCategory name="Connection/Authentication">的解决方法
- java web单点登录异常情况处理
- java#0 基本概念
- udp单播-广播-组播-python例子
- 黑马程序员——Eclipse快捷键总结
- udp组播试验-C语言
- Labwindows/CVI程序调用C#生成的Dll文件
- thinkphp3.2.3 相关
- 树莓派、debian 下安装 phantomjs casperjs
- python-简单的makefile生成程序-没有注释
- thinkphp3.2.3 命名空间
- matlab find函数详解
- pthread编程基础
- 十一、c语言算术优先级和口诀