我希望能够从JSContext调用一个返回诺言的函数。看来JSObjectMakeDeferredPromise是执行此操作的机制,但是文档很少,我不确定如何执行此操作。
任何人都可以提供在JSContext中调用返回诺言的函数的示例吗?
WebKit是一个开源项目。我找到了与该功能有关的issue。此函数更喜欢为未处理的承诺拒绝抛出异常。
因此您不能使用该函数返回承诺。但是JavaScriptCore支持Promise关键字。我在使用Xcode 11.4.1的macOS上运行此脚本。效果很好。
const promiseA = new Promise( (resolve, reject) => {
emulator.downloadWithHandler( (response) => {
var isFinish = response["isFinish"];
var isCancelled = response["isCancelled"];
var date = response["date"];
console.log("isFinish: " + isFinish);
console.log("isCancelled: " + isCancelled);
console.log("date: " + date);
if (isFinish || isCancelled) {
resolve(date);
}
});
});
[emulator.downloadWithHandler
是本机回调,它将在后台DispatchQueue上返回。如果您想使用该承诺,请保留该承诺。调用context.objectForKeyedSubscript("promiseA")
并使用JSManagedValue
对其进行包装。