getting-started-with-javascript
getting-started-with-javascript copied to clipboard
用异步函数扫描时,无法写入文件,用同步函数扫描可以成功写入,是什么原因?
感觉自己的同步异步好像还是有点不清楚。 在做第六课作业的时候,用异步函数扫描时,扫描出的文件直接就打印了。无法把获得的数据给到定义出的参数,无法写入指定的文件。(见图1) 异步函数得到的数是不是通过给的通道走掉了,有种抓不住的感觉。
用同步函数扫描时,就可以把获得的数据给到定义的函数,然后成功写入文件。这是怎么回事呢?(见图2)
图1
图2
callback1是读取文件的回调函数,在这个函数里你能拿到读取的结果信息,并且你要在这个函数里去主动调用fs.writeFile函数。
我在做作业时也遇到了类似图一的问题, 图一最终被写入文件中的files应该说是undefine,因为fs.readdir函数并没有返回值。我还尝试在callback1中,紧接着console.log(files);后面加了 return files,结果依然是undefine,哈哈。后来明白,那是因为files只是作用在callback中,在函数外是没人认识的。 可以按老师说的,直接将异步写入函数加到console.log(files)下一行就OK了。
按照老师的指导,把fs.writeFile函数写入了callback1中,执行成功了~~重新听了lesson9,弄明白了同步,异步与直接返回和间接返回的各种区别。 (1)同步异步与直接返回间接返回之间的区别; 同步异步,是指函数执行中,原来的代码与调用函数之间执行时的关系,是同一条线上执行还是各做各的。 直接返回、间接返回是指调用的函数如何返回结果。
(2)同步异步的区别 同一条线上执行就是同步,各做各的就是异步。就像老板和秘书,如果是在线等拿到结果后,再继续下面的任务,就是同步;如果调用了函数后,不等结果返回,继续执行下面的任务了,就是异步。
(3)直接返回、间接返回的区别 直接返回结果就是直接返回,如果通过callback通道给出结果就是间接返回。 概念清晰的感觉真好~~再来看老师的解答,也理解了其中的原因。开心