【问题标题】:Resolving a Javascript promise in iOS using JavascriptCore使用 JavascriptCore 解决 iOS 中的 Javascript 承诺
【发布时间】:2016-09-21 11:21:17
【问题描述】:
我目前有一些外部Javascript 代码(异步执行),iOS 应用程序与之交互并可以有条件地评估部分。现在,当Javascript 函数返回时,它们会向需要解决的iOS 应用程序返回一个“承诺”。有什么方法可以通过JavascriptCore 解决 iOS 中的承诺;还是我在这里打了一场失败的战斗,我是否应该在将值返回给 iOS 之前解决 Javascript 中的“所有”承诺?
【问题讨论】:
标签:
javascript
ios
swift
javascriptcore
【解决方案1】:
看看这个库:
https://github.com/marcuswestin/WebViewJavascriptBridge
至少作为一个例子。
它不会将 js Promise 作为原生代码中的 JS 结果来管理,我认为这是不可能的,但它实现了一种管理来自原生代码的异步 JS 调用的方法。
如果我没记错的话,管理异步 JS 调用的主要逻辑是:
- 当原生代码需要调用异步 JS 方法时,它会将原生回调存储到回调注册表中,并为其分配一个标识符。
- 然后调用JS方法传递回调标识符。
- 当异步 JS 方法结束时(使用 Promise 或其他),它使用相同的回调标识符调用本机代码。
- 这允许本机代码调用存储在注册表中的回调。
该库结构良好,允许处理程序注册等...,但我认为 Native-->JS 调用的原始逻辑基本上就是这样。