如最下面大段代码中有一句: ok = writer.write(data, encoding,function(){console.log(‘因为是异步,所以i都是0:’ , i);}); 这一句的write方法是异步,ok初始为false,那么在紧接着的下一句console.log(ok)中,ok应该为true还是false? 如果ok是false那么说明ok的赋值至少要在下一个事件循环里, 如果ok是true那么说明这个异步方法已经完成了?!并且有返回值。 实际是true,我就搞不懂了,不知道怎么理解。
var fs = require(‘fs’); var w = fs.createWriteStream(‘txt.txt’);
writeTimes(w,’utf8’,function(){console.log(‘完成’);});
function writeTimes(writer, encoding, callback) { var data = '’; var i = 10; write(); function write() { var ok = false; do { ok = false; data =new Date().getTime().toString() + '\n’; i -= 1; if (i === 0) { // last time! writer.write(data, encoding, callback); } else { ok = false; ok = writer.write(data, encoding,function(){console.log(‘因为是异步,所以i都是0:’ , i);}); console.log(‘write方法外,第 %d 次,write的返回: %s’ ,10-i, ok.toString()); } } while (i > 0 && ok); if (i > 0) { // had to stop early! // write some more once it drains writer.once('drain’, write); } } }
OK = writer.writer() 因为没有RETURN 而writer函数的writer方法存在故返回TRUE?
我猜的。你的写法我看的太累了23333。
异步方法x有返回值,那么y = x()的赋值是什么时候进行? 如果X()是同步函数,那Y会等待X的返回值的。是异步会返回UNDEFINED貌似?。
改简单了点,可以直接考到一个js,然后Node一下就看结果
var fs = require(‘fs’); var w = fs.createWriteStream(‘txt.txt’); var data = '’; var i = 10; var ok = false;
do { ok = false; data =new Date().getTime().toString() + '\n’; i -= 1; ok = w.write(data, 'utf8’,function(){console.log(‘因为是异步,所以i都是0:’ , i);}); console.log(‘write方法外,第 %d 次,write的返回: %s’ ,10-i, ok.toString()); } while (i > 0 && ok);
function aaa(cb) { cb(); // 执行了回调,但函数还没到返回的时候 return 9999; // 这才是返回值 }
function aaa(cb) { process.nextTick(cb); // 会在未来执行回调,但现在这个aaa函数还没到返回的时候 return 9999; // 这才是返回值 }
@liuyanghejerry 应该是你的这个例子: function aaa(cb) { process.nextTick(cb); // 会在未来执行回调,但现在这个aaa函数还没到返回的时候 return 9999; // 这才是返回值 } “但现在这个aaa函数还没到返回的时候”,aaa函数的返回应该是当时就返回了。