4

私がそのような機能を持っているとしましょう(Javascriptで):

関数 fun(success_cb, error_cb) {
  var 結果;
  試す {
    結果 = function_that_calculates_result();
    success_cb(結果);
  }キャッチ(e){
    error_cb(e);
  }
}

そして、私はそれを次のように使用します:

楽しい(関数(結果){
  console.log(結果);
}、関数(エラー){
  console.log(エラー.メッセージ);
});

IcedCoffeeScript でこの関数の使用法を と で書き換えるにはどうすればよいawaitですdeferか?

4

2 に答える 2

0

maxtaco/coffee-script#120から:

この問題を解決するには、主に 2 つの方法があります。

  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 libを使用します (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 に答える
0

アイスコーヒースクリプトでこれを行う最適な方法はないと思いますが、その投稿には興味深い提案がいくつかあります:複数のコールバックを使用したアイスコーヒースクリプト

私はバニラコーヒーのスクリプトに固執します:

これは、あなたの関数がコーヒースクリプトで書かれる方法です

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

fun 関数をコーヒー スクリプトの「errback」スタイル (err、result) に書き直すことができる場合、次のようになります。

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 に答える