XCode内置了webkit,XCode可以发出JavaScript命令并接收返回值。一切都很好 - 除非JavaScript具有与executeSql类似的回调函数。
如何在调用回调之前编写一个不返回的函数?
你可以将它包装在另一个函数中吗?
答案 0 :(得分:2)
有两种解决方案 - 您可以使用延续传递方式编写整个程序,也可以使用蹦床来模拟实际连续。
如果你想使用延续传递样式,那么我建议你先阅读以下StackOverflow线程:What's the difference between a continuation and a callback?
延续传球风格可能是一种痛苦。幸运的是有一些JavaScript预处理程序,如jwacs(Javascript With Advanced Continuation Support),可以轻松编写这样的代码:http://chumsley.org/jwacs/
第二个选项(使用trampolining)目前仅适用于Firefox和Rhino。对不起XCode。您可以在此处详细了解蹦床:Trampolines in Javascript and the Quest for Fewer Nested Callbacks
如果您感兴趣,那么我已经为JavaScript编写了一个小型光纤管理器,允许您同步调用异步函数:https://github.com/aaditmshah/fiber
答案 1 :(得分: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.
}
另请参阅