同步JavaScript

时间:2013-03-12 01:49:43

标签: javascript asynchronous

XCode内置了webkit,XCode可以发出JavaScript命令并接收返回值。一切都很好 - 除非JavaScript具有与executeSql类似的回调函数。

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

你可以将它包装在另一个函数中吗?

2 个答案:

答案 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.
}

另请参阅