您的位置:首页 > 编程语言

Promise模式编程链式调用中的一个小坑——匿名函数

2015-12-16 20:45 302 查看
又被一些没有完全理解的小坑给坑了。

上文书中记录到如果我想在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中,就会有意想不到的结果。至于为啥,我也不知道。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: