4

假设我有这样的功能(在 Javascript 中):

功能乐趣(success_cb,error_cb){
  变量结果;
  尝试 {
    结果 = function_that_calculates_result();
    成功_cb(结果);
  } 抓住 (e) {
    error_cb(e);
  }
}

我像这样使用它:

乐趣(功能(结果){
  控制台.log(结果);
},函数(错误){
  console.log(error.message);
});

如何在 IcedCoffeeScript 中使用await和重写此函数的用法defer

4

2 回答 2

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”样式(err,result)重写 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
于 2013-09-16T13:42:27.230 回答
0

来自maxtaco/coffee-script#120

解决这个问题主要有两种方法:

  1. 建立一个连接器(如 maxtaco 所建议的):
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库(来自 node-awaitajax 的代码示例):
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
于 2015-02-04T17:39:15.563 回答