XCode 内置了 webkit,XCode 可以发出 JavaScript 命令并接收返回值。一切都很好——除非 JavaScript 有一个回调函数,比如 executeSql。
如何编写一个在调用回调之前不返回的函数?
你可能把它包装在另一个函数中吗?
XCode 内置了 webkit,XCode 可以发出 JavaScript 命令并接收返回值。一切都很好——除非 JavaScript 有一个回调函数,比如 executeSql。
如何编写一个在调用回调之前不返回的函数?
你可能把它包装在另一个函数中吗?
有两种解决方案 - 您可以以延续传递风格编写整个程序,也可以使用蹦床来模拟真实延续。
如果您想使用延续传递风格,那么我建议您首先阅读以下 StackOverflow 线程:延续和回调之间有什么区别?
连续传递风格可能很难写。幸运的是,有 JavaScript 预处理器,如 jwacs(具有高级延续支持的 JavaScript),可以轻松编写此类代码:http ://chumsley.org/jwacs/
第二个选项(使用蹦床)目前仅适用于 Firefox 和 Rhino。对不起 XCode。您可以在此处阅读有关蹦床的更多信息:Javascript 中的蹦床和减少嵌套回调的探索
如果您感兴趣,那么我为 JavaScript 编写了一个小型光纤管理器,它允许您同步调用异步函数:https ://github.com/aaditmshah/fiber
我可以建议定期检查吗?
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.
}
也看看