Promise编程模式中链式调用时传值的一个小坑
2015-12-16 20:17
302 查看
“原谅不是为了优越感,而是清洁自己的心,不让自己的心成为怨恨之所。”
所以,我们要原谅那些编程里遇到的坑,让心地清净起来。
看了一下午Promise编程模式的入门教程,尝试着写一个链式调用的demo,一不小心还是掉进了坑里。好在坑不大,又迅速爬上来了。
原本期许是先读出foo.txt文件中的文字,然后再读出foo2.txt中的文字。但是这么写,只打印出了foo.txt中的文字,然后,就没有然后了。
仔细检查之后,才意识到我把read方法的返回值写到了fs.read这个异步调用的方法里面去了。Promise原本是要在开始执行异步方法之前,就要明确好执行完了干嘛的。这么写岂不是必须要等到那个fs.read执行完了才知道给下一步传什么值。行文至此,又想到一个新问题:如果我下一步执行函数需要的参数就是要等上一步异步函数执行完毕才能得到,咋办???(先扔一边,回头再去填坑)
所以,这代码这么改一下,把return ‘foo2.txt’ 移到外面来就好了!
填坑完毕。
所以,我们要原谅那些编程里遇到的坑,让心地清净起来。
看了一下午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'; }
填坑完毕。
相关文章推荐
- Java WebService-CXF-基于SOAP的Web服务
- 使用eclipse发布web服务出现"Error occured when adding the module, xxxxxx, to the server"
- java.lang.RuntimeException: setAudioSource failed.
- MATLAB——scatter的简单应用
- 设置查看java的源程序
- 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】
- python(1)
- 用正则表达式 搜索代码
- python之字符串格式化
- Java多线程之----CyclicBarrier
- C# 动态生成RDLC报表文件
- 原创内容doc文档备份到github
- C++ STL 的实现:
- QT学习之QPushButton,按钮操作。
- Struts2中的OGNL详解(和标签库一起使用)
- Java基础--数组
- ubuntu手动安装eclipse
- 利用openssl管理证书及SSL编程第1部分: openssl证书管理
- 利用openssl管理证书及SSL编程第1部分: openssl证书管理
- C++11: function type