Promise模式编程链式调用中的一个小坑——匿名函数
来源:互联网 发布:hdfs怎么保证数据安全 编辑:程序博客网 时间:2024/06/01 12:03
又被一些没有完全理解的小坑给坑了。
上文书中记录到如果我想在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(){…} 和 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中,就会有意想不到的结果。至于为啥,我也不知道。
0 0
- Promise模式编程链式调用中的一个小坑——匿名函数
- Promise编程模式中链式调用时传值的一个小坑
- 一个函数调用模式的小坑
- promise链式小技巧
- angular的$q返回一个可链式调用的promise
- JavaScirpt设计模式——链式调用
- iOS 中的 promise 模式
- 异步编程——promise
- 异步编程——Promise
- 响应式编程、函数式编程、链式调用
- javascript中的成员函数调用的一个小问题
- Builer模式链式调用
- 5-JavaScript设计模式——链式编程
- 闭包 匿名函数的调用 链式作用域 预解析机制
- Android中的链式调用
- Block (三) OC中的函数式编程\链式编程
- iOS中的函数式编程和链式编程
- Python函数式编程——匿名函数lambda
- poj--1041
- 荷花-处女作-少一个叶
- <LeetCode OJ> 70. Climbing Stairs
- 优先队列和索引优先队
- python scrapy安装中的一点问题
- Promise模式编程链式调用中的一个小坑——匿名函数
- oracle存储过程中传入日期参数,插入到表
- ZigZag Conversion
- Java List序列化的实现
- 合唱队形
- 追踪系统调用流程
- iOS UIAlertController提示框
- hdoj Saving Beans 3037 (Lucas定理入门)
- 中级篇——背包问题2(完全背包)