我们假设我有这样的功能(在Javascript中):
function fun(success_cb, error_cb) { var result; try { result = function_that_calculates_result(); success_cb(result); } catch (e) { error_cb(e); } }
我用它像:
fun(function(result) { console.log(result); }, function(error) { console.log(error.message); });
如何使用await
和defer
重写IcedCoffeeScript中此函数的用法?
答案 0 :(得分:0)
我认为在冰咖啡脚本中没有最佳方法可以做到这一点,尽管该帖子有一些有趣的建议:Iced coffee script with multiple callbacks
我会坚持使用香草咖啡脚本:
这就是你的函数在咖啡脚本中的写作方式
fun = (success_cb, error_cb) ->
try
result = function_that_calculates_result()
success_cb result
catch e
error_cb e
以及如何在咖啡脚本中调用它
fun (result) ->
console.log result
, (error) ->
console.log error.message
如果您可以在咖啡脚本中以“errback”样式(错误,结果)重写fun函数,那将是:
fun = (callback) ->
try
result = function_that_calculates_result()
callback null, result
catch e
callback e
然后你会像冰镇咖啡一样使用它
await fun defer error, result
if error
console.log error.message
else
console.log result
答案 1 :(得分:0)
有两种主要方法可以解决此问题:
converter = (cb) -> cb_success = (args...) -> cb null, args... cb_error = (err) -> cb err return [cb_error, cb_success] await getThing thing_id, converter(defer(err,res))... console.log err console.log res
settings.success = rv.id('success').defer data, statusText, xhr settings.error = rv.id('error').defer xhr, statusText, error xhr = najax settings await rv.wait defer status switch status when 'success' then defersuccess data, statusText, xhr when 'error' then defererror xhr, statusText, error