2

XCode 内置了 webkit,XCode 可以发出 JavaScript 命令并接收返回值。一切都很好——除非 JavaScript 有一个回调函数,比如 executeSql。

如何编写一个在调用回调之前不返回的函数?

你可能把它包装在另一个函数中吗?

4

2 回答 2

2

有两种解决方案 - 您可以以延续传递风格编写整个程序,也可以使用蹦床来模拟真实延续。

如果您想使用延续传递风格,那么我建议您首先阅读以下 StackOverflow 线程:延续和回调之间有什么区别?

连续传递风格可能很难写。幸运的是,有 JavaScript 预处理器,如 jwacs(具有高级延续支持的 JavaScript),可以轻松编写此类代码:http ://chumsley.org/jwacs/

第二个选项(使用蹦床)目前仅适用于 Firefox 和 Rhino。对不起 XCode。您可以在此处阅读有关蹦床的更多信息: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 回答