Promise编程模式中链式调用时传值的一个小坑

“原谅不是为了优越感,而是清洁自己的心,不让自己的心成为怨恨之所。”

所以,我们要原谅那些编程里遇到的坑,让心地清净起来。

看了一下午Promise编程模式的入门教程,尝试着写一个链式调用的demo,一不小心还是掉进了坑里。好在坑不大,又迅速爬上来了。

var Q=require('q');
var fs=require('fs');

Promise.resolve('foo.txt').then(read).then(read)

function read(fn){
    fs.readFile(fn,'utf-8',function(err,data){
        if(err){
            console.log('err')
            return 'foo2.txt';

        }

        console.log(data+"\n");

        return 'foo2.txt';

    })

}

原本期许是先读出foo.txt文件中的文字,然后再读出foo2.txt中的文字。但是这么写,只打印出了foo.txt中的文字,然后,就没有然后了。

仔细检查之后,才意识到我把read方法的返回值写到了fs.read这个异步调用的方法里面去了。Promise原本是要在开始执行异步方法之前,就要明确好执行完了干嘛的。这么写岂不是必须要等到那个fs.read执行完了才知道给下一步传什么值。行文至此,又想到一个新问题:如果我下一步执行函数需要的参数就是要等上一步异步函数执行完毕才能得到,咋办???(先扔一边,回头再去填坑)

所以,这代码这么改一下,把return ‘foo2.txt’ 移到外面来就好了!

var Q=require('q');

var fs=require('fs');



Promise.resolve('foo.txt').then(read).then(read)



function read(fn){

    fs.readFile(fn,'utf-8',function(err,data){

        if(err){

            console.log('err')

        }

        console.log(data+"\n");

    })

    return 'foo2.txt';

}

填坑完毕。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值