如何在两个回调函数中使用IcedCoffeeScript?

时间:2013-09-04 13:49:59

标签: iced-coffeescript

我们假设我有这样的功能(在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);
});

如何使用awaitdefer重写IcedCoffeeScript中此函数的用法?

2 个答案:

答案 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)

来自maxtaco/coffee-script#120

有两种主要方法可以解决此问题:

  1. 构建连接器(按照maxtaco的建议):
  2. 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
    
    1. 使用iced.Rendezvous lib(来自node-awaitajax的代码示例):
    2. 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