来自C代码的异步javascript库调用完成得太晚了
发布时间:2020-12-16 07:20:34 所属栏目:百科 来源:网络整理
导读:我正在使用emscripten编译一个C程序,它使用我编写的 JavaScript库,并将它们与–js-library标志链接在一起.我的C代码调用库中的一个函数,其中包含一个Promise,并且在回调中我希望它将给定的结果写入一些已经从C调用者传递到JS函数的内存中.这是一个例子(为了
我正在使用emscripten编译一个C程序,它使用我编写的
JavaScript库,并将它们与–js-library标志链接在一起.我的C代码调用库中的一个函数,其中包含一个Promise,并且在回调中我希望它将给定的结果写入一些已经从C调用者传递到JS函数的内存中.这是一个例子(为了简洁,我省略了Promise的错误捕获部分):
lib.js mergeInto(LibraryManager.library,{ compute_js: function(input,out_buf) { do_promise_computation( input ).then(function(result){ Module.print("Promise Returned fully"); for (var i = 0; i < 8; i++) { var num = result[i] {{{makeSetValue('out_buf+(i*4)','num','i32')}}} } }); } program.c #include <stdio.h> #include <stdint.h> #include <emscripten.h> extern void compute_js(int32_t,int64_t*); int main() { int32_t input = 1234; int64_t out_buf[4]; int64_t* out_ptr = (int64_t*)(&out_buf); printf("Calling Javascriptn"); compute_js(input,out_ptr); printf("%lldn",out_buf[0]); printf("%lldn",out_buf[1]); } 在没有Promise的其他函数中,我已经为库编写了,我已经能够成功地将数据写入C代码给出的缓冲区,但这次输出如下: Calling Javascript 0 0 Promise Returned fully 但我希望能够等待Promise的结果然后将其写入C代码,以便Promise返回完全位于C代码中的printf语句之后,这些语句是在JavaScript调用之后.有没有办法用emscripten做到这一点? 解决方法
使用ASYNCIFY_FUNCTIONS和_emscripten_async_resume.
https://kripken.github.io/emscripten-site/docs/porting/asyncify.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |