gpt4 book ai didi

ios - JavasScriptCore 异步回调

转载 作者:行者123 更新时间:2023-11-29 02:21:44 25 4
gpt4 key购买 nike

我试图找出一种方法来执行一些 Javascript 并通过完成 block 返回结果,但由于某种原因,回调永远不会触发。

+ (void)doSomethingWithCompletionHandler:(void (^)(NSError* error, NSString *result))completionHandler;
{
JSContext __block *context;
context = [[MyJSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"done"] = (id) ^(NSString *result)
{
context = nil;
completionHandler(nil, result);
};

// this works
// [context evaluateScript:@"(function(){ done('immediate'); })()"];

// this does not
[context evaluateScript:@"(function(){ setTimeout(function(){ done('delayed'); }, 1000); })()"];

}

一旦我尝试使其异步,在此处通过使用超时进行模拟,则永远不会调用 context[@"done"] 中的 block 。

我扩展了 JSContext 以确保它在超出范围时不会被释放(因此是 __black hack)。

我是不是用错了方法?

最佳答案

我猜问题出在 JavaScriptCore 中没有 setTimeout 函数。您可以自己编写它,也可以为此寻找一些现有的库( self 提升!)https://github.com/artemyarulin/JSCoreBom

附言至少有 setTimeout 确实是个好主意,因为很多很多库都在使用它

P.P.S使用 JSContext setExceptionHandler 来捕捉这样的错误

关于ios - JavasScriptCore 异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com