JacksonTian/diveintonode_examples

第4章节的promise_a里的smooth.js 部分勘误

gaogao1030 opened this issue · 4 comments

var fs = require('fs');

var Deferred = require('./sequence.js').Deferred;

var smooth = function (method) {
return function () {
var deferred = new Deferred();
var args = Array.prototype.slice.call(arguments, 1);//这里参数为1下面会报路径错误 为0才会传路径参数进去
args.push(deferred.callback());
method.apply(null, args);
return deferred.promise;
};
};

var readFile = smooth(fs.readFile);
readFile('file1.txt', 'utf8').then(function (file1) {
return readFile(file1.trim(), 'utf8');
},function(err){console.log(err)}).then(function (file2) {//多加了个错误处理可以看到为1的话 会打印错误日志,书上和这里的版本都没加这个 所以没报错 很容易忽视
// file2 => I am file2
console.log(file2);
});

之前打印出来看似正确结果其实是从var Deferred = require('./sequence.js').Deferred;这句话里打印的 看到sequence.js里的执行并没有被去掉 很容易迷惑

你看的是第几印?

第三次印刷

这里的example上的代码arguments 也是1 我是clone这个repo 调试的时候发现的