最近在开发Backbone.JS/jQuery/CoffeeScript项目时,我发现自己陷入了一堆回调和时间问题.我需要等待一些事情才能完成,然后发现自己陷入了一堆嵌套的回调......这让人感到困惑和难以调试.然后我找到了2个可能的解决方案jQuery deferred或IcedCoffeeScript
IcedCoffeeScript看起来很简单,只需添加await&defer.但是,我不知道它会留下来吗?StackOverflow上只有2个问题吗?与CoffeeScript相比,没有太多谈论它
另一件事是两种方法之间的区别是什么,它们似乎大致相同?除了在IcedCoffeeScript中,它看起来更像是程序代码,并且在jQuery延迟,它并没有解决我的混乱回调
当我刷新多个数据源时,我正在使用Iced coffescript和upshot js.刷新方法有两个回调一个用于成功,一个用于错误,我想等待每个调用进行回调.
我无法看到如何使用idced coffescript执行此操作而无需添加其他功能.我的问题是 - 有更优雅的方式,我可以推迟多个回调之一?
这是我目前的代码:
refreshMe = (key, value, result) =>
value.refresh(
(success)=>
result success
,
(fail, reason, error)=>
result undefined, fail
)
@refresh = () =>
success={}
fail={}
await
for key, value of @dataSources
refreshMe key, value, defer success[key], fail[key]
Run Code Online (Sandbox Code Playgroud) node.js中的常见做法是将错误消息作为回调函数的第一个参数返回.纯JS(Promise,Step,seq等)中有许多解决这个问题的方法,但它们似乎都不能与ICS集成.什么是正确的解决方案来处理错误而不会失去很多可读性?
例如:
# makes code hard to read and encourage duplication
await socket.get 'image id', defer err, id
if err # ...
await Image.findById id, defer err, image
if err # ...
await check_permissions user, image, defer err, permitted
if err # ...
# will only handle the last error
await
socket.get 'image id', defer err, id
Image.findById id, defer err, image
check_permissions user, image, defer err, permitted
if err # ...
# ugly, makes code more rigid
# no …Run Code Online (Sandbox Code Playgroud) 我用try catch块了iced coffee script.我调用不存在fake的对象不存在的方法a并期望捕获错误.
db = require '../../call/db.iced'
try
await db.find "79", defer c, d
a.fake()
catch error
console.log "error catched"
console.log error
Run Code Online (Sandbox Code Playgroud)
但是db.find在控制台中调用函数a.fake()后抛出错误,但是它没有try catch按预期使用块.
如果我注释掉字符串await db.find "79", defer c, d......
db = require '../../call/db.iced'
try
# await db.find "79", defer c, d ############## commented out
a.fake()
catch error
console.log "error catched"
console.log error
Run Code Online (Sandbox Code Playgroud)
...它按预期工作,并且错误被捕获.
我尝试await db.find "79", defer c, d通过其他简单的异步函数calles 更改字符串,但它们工作正常,错误很好.
有趣的是功能db.find …