如何从块函数中获取数据?

How to get data from the block function?

我从 WKWebView 触发一个 js,并在块函数中得到结果。在块函数中,我得到了正确的数据。但是,当我把这个数据赋值给外面的外部变量时,总是得到nil值。

- (id)triggerJS:(NSString*)js
{
    NSLog(@"JS = %@",js);

    __block id resultJS = nil;
    [self.webView evaluateJavaScript:js completionHandler: ^(id data, NSError* err) {

                                                            resultJS = [data copy];
                                                        }
     ];

    if (resultJS != nil)
    {
        NSString* str = (NSString*)resultJS;
        NSLog(@"Result of JS = %@", str);
    }
    else
    {
        NSLog(@"Result of JS = nil");
    }

    return resultJS;
}


这是为什么?谢谢

那是因为函数evaluateJavaScript是异步执行的,所以当你执行if (resultJS != nil)时,“completionHandler”还没有执行,这就是你总是得到的原因nil 值。

对此的最佳改进是尝试在“completionHandler”块内重新编写和调整您的代码,这将管理 resultJS 数据。