0

このフィドルhttp://jsfiddle.net/jdsans/38GFS/を試しましたが、コールバック関数のリターンをメイン関数に送信できませんでした。コールバック関数には、私が望む正確な終了戻り値が含まれていますが、返されません。

document.write()関数を使用して戻り値を出力すると、希望どおりの正確な値が出力されますが、前に述べたように、返されません。

誰かがこのフィドルを使って実際の例を見せてくれませんか。あなたが私を理解するのに問題がないように、私はコメントとしてフィドルに詳細を追加しました。

4

1 に答える 1

5

非同期コールバックに(「同期」関数呼び出しに)値を返させようとしているようです。それは、乾燥した土地でボートをキャプテンしようとするようなものです。パラダイムは適合しません。

「値を返す」という概念は、同期モデルにのみ存在します。ある関数が別の関数を呼び出し、値を操作して返すことができる場合。ただし、返したい値は関数コールバックに存在します。つまり、戻り値を保存する部分を含め、実行スレッド全体がコールバック関数の前に実行されます。

非同期的に考える必要があります。値を返さないでください。値を使用して、必要な作業を実行する他の関数を呼び出します。

説明してみます。私がコードを持っているとしましょう:

  1. 何かをする
  2. 値を返すコールバックを使用して非同期関数を呼び出す
  3. 戻り値を使用して画面に印刷します

非同期の考え方は、コールバックが呼び出される前に1〜3を実行することです。それがコールバックと呼ばれる理由です!! したがって、値を取得する前に3が実行されます。それは意味がありません。代わりに、実行するコードを変更する必要があります。

  1. 何かをする
  2. 値を使用し、上から3を実行するコールバックを使用して非同期関数を呼び出します。
于 2011-07-30T14:23:54.813 に答える