如何在 CoffeeScript 中进行回调
How can I make a callback in CoffeeScript
本文关键字:回调 CoffeeScript 更新时间:2023-09-26
我把这点代码混在了node中.js它允许我创建一个目录的无序列表。我想要的是让父循环函数暂停并等待子循环完成,然后继续代码。
这是我的代码:
listFolders = (dir, callback) ->
readDir = "#{__dirname}/public/#{dir}"
fs.readdir readDir, (err, files) ->
files.forEach (file) ->
dirname = file
path = "#{dir}/#{file}"
readPath = "#{readDir}/#{file}"
fs.stat readPath, (err, stat) ->
if stat && stat.isDirectory()
console.log "<li class='folder' data-path='#{dir}' data-name='#{dir}/#{dirname}'><span>#{dirname}</span><ul>"
listFolders path, () ->
console.log "</ul></li>"
else if stat && stat.isFile()
console.log "<li class='file' data-path='#{dir}' data-filename='#{dirname}'><span>#{dirname}</span></li>"
return callback
如您所见,我试图给函数一个回调,但是当我使用它时
listFolders path, () ->
console.log "</ul></li>"
控制台日志永远不会运行,也不会暂停我的代码。
我正在扫描的文件夹的输出是
<li class='file' data-path='/user_projects/1' data-filename='.DS_Store'><span>.DS_Store</span></li>
<li class='folder' data-path='/user_projects/1' data-name='/user_projects/1/assets'><span>assets</span><ul>
<li class='file' data-path='/user_projects/1' data-filename='index.html'><span>index.html</span></li>
<li class='folder' data-path='/user_projects/1/assets' data-name='/user_projects/1/assets/css'><span>css</span><ul>
<li class='file' data-path='/user_projects/1/assets' data-filename='test.php'><span>test.php</span></li>
<li class='file' data-path='/user_projects/1/assets/css' data-filename='main.css'><span>main.css</span></li>
它应该是
<li class='file' data-path='/user_projects/1' data-filename='.DS_Store'><span>.DS_Store</span></li>
<li class='folder' data-path='/user_projects/1' data-name='/user_projects/1/assets'><span>assets</span><ul>
<li class='folder' data-path='/user_projects/1/assets' data-name='/user_projects/1/assets/css'><span>css</span><ul>
<li class='file' data-path='/user_projects/1/assets' data-filename='test.php'><span>test.php</span></li>
<li class='file' data-path='/user_projects/1/assets/css' data-filename='main.css'><span>main.css</span></li>
</ul></li>
</ul></li>
<li class='file' data-path='/user_projects/1' data-filename='index.html'><span>index.html</span></li>
我已经为这个问题困扰了一段时间,并希望有人帮助我。您的帮助将不胜感激。
>>>>>>使用每个系列进行更新<<<<<<<</h1>
我现在正在使用下面提供的代码
listFolders = (dir, callback) ->
readDir = "#{__dirname}/public/#{dir}"
fs.readdir readDir, (err, files) ->
async.forEachSeries files, (file, callback) ->
dirname = file
path = "#{dir}/#{file}"
readPath = "#{readDir}/#{file}"
fs.stat readPath, (err, stat) ->
if stat && stat.isDirectory()
console.log "<li class='folder'><span>#{dirname}</span><ul>"
listFolders path, () ->
console.log "</ul></li>"
callback()
else if stat && stat.isFile()
console.log "<li class='file'><span>#{dirname}</span></li>"
callback()
, callback
我的输出不是我想要的蚂蚁,而是这个(关闭"ul"和"li"不显示):
<li class='file' data-path='/user_projects/1' data-filename='.DS_Store'><span>.DS_Store</span></li>
<li class='folder'><span>assets</span><ul>
<li class='folder'><span>css</span><ul>
<li class='file'><span>main.css</span></li>
我在目录中的文件夹应该像这样显示
- .ds_store
- asstets
- css
- main.css
- test.php
- index.html
你正在传递一个函数callback
,但你永远不会调用它。 你只是在归还它。 你可能想研究类似异步.js的东西。 然后,您将编写如下所示的代码:
listFolders = (dir, callback) ->
readDir = "#{__dirname}/public/#{dir}"
fs.readdir readDir, (err, files) ->
async.forEachSeries files, (file, callback) ->
dirname = file
path = "#{dir}/#{file}"
readPath = "#{readDir}/#{file}"
fs.stat readPath, (err, stat) ->
if stat && stat.isDirectory()
console.log "<li class='folder' data-path='#{dir}' data-name='#{dir}/#{dirname}'><span>#{dirname}</span><ul>"
listFolders path, () ->
console.log "</ul></li>"
callback()
else if stat && stat.isFile()
console.log "<li class='file' data-path='#{dir}' data-filename='#{dirname}'><span>#{dirname}</span></li>"
callback()
, callback
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 使用 CoffeeScript 的类和 jquery.transit 创建一个回调循环
- coffeescript回调声明中未使用的参数
- 如何在 CoffeeScript 中进行回调
- 尝试在Fancybox回调内调用CoffeeScript方法时出现范围问题
- 谷歌.在coffeescript类中加载回调
- coffeescript中带有回调设计模式的If语句
- 调试JS/CoffeeScript代码:事件,回调等
- 在CoffeeScript中定义BootstrapValidator回调
- Coffeescript - 'this'总是被'_this'在胖箭头回调
- 从jQuery回调中引用CoffeeScript中的父类
- 我如何等待一个回调在coffeescript(或javascript)
- CoffeeScript:回调.叫不工作