2

XCode には Webkit が組み込まれており、XCode は JavaScript コマンドを発行して戻り値を受け取ることができます。JavaScript が executeSql のようなコールバック関数を持っている場合を除いて、それで問題ありません。

コールバックが呼び出されるまで戻らない関数をどのように作成しますか?

おそらく別の関数でラップしますか?

4

2 に答える 2

2

2 つの解決策があります。プログラム全体を継続渡しスタイルで記述するか、トランポリンを使用して実際の継続をシミュレートするかのいずれかです。

継続渡しスタイルを使用する場合は、最初に次の StackOverflow スレッドを読むことをお勧めします:継続とコールバックの違いは何ですか?

継続渡しスタイルは、書くのが面倒な場合があります。幸いなことに、そのようなコードの記述を容易にする jwacs (Javascript With Advanced Continuation Support) のような JavaScript プリプロセッサがあります: http://chumsley.org/jwacs/

2 番目のオプション (トランポリンを使用) は現在、Firefox と Rhino でのみ機能します。申し訳ありません。トランポリンの詳細については、こちらをご覧ください: Javascript のトランポリンとネストされたコールバックを減らすための探求

興味があれば、非同期関数を同期的に呼び出すことができる JavaScript 用の小さなファイバー マネージャーを作成しました: https://github.com/aaditmshah/fiber

于 2013-03-12T02:05:05.660 に答える
1

定期的にチェックすることをお勧めしますか?

var executeSqlIsDone = false;
executeSql({
        callback: someCallbackFunction();
     });
waitUntilCallbackIsFinished();
//continue processing

function someCallbackFunction()
{
    executeSqlIsDone = true;
}

function waitUntilCallbackIsFinished()
{
     if(executeSqlIsDone === false)
     {
          setTimeout(waitUntilCallbackIsFinished, 100); //some low value
     }
     //else - do nothing. Wait.
}

こちらも調べて

于 2013-03-12T02:07:29.310 に答える