来自C代码的异步javascript库调用完成得太晚了

来自C代码的异步javascript库调用完成得太晚了,第1张

概述我正在使用emscripten编译一个C程序,它使用我编写的 JavaScript库,并将它们与–js-library标志链接在一起.我的C代码调用库中的一个函数,其中包含一个Promise,并且在回调中我希望它将给定的结果写入一些已经从C调用者传递到JS函数的内存中.这是一个例子(为了简洁,我省略了Promise的错误捕获部分): lib.js mergeInto(LibraryManager. 我正在使用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 JavaScript\n");  compute_Js(input,out_ptr);  printf("%lld\n",out_buf[0]);  printf("%lld\n",out_buf[1]);}

在没有Promise的其他函数中,我已经为库编写了,我已经能够成功地将数据写入C代码给出的缓冲区,但这次输出如下:

Calling JavaScript00Promise Returned fully

但我希望能够等待Promise的结果然后将其写入C代码,以便Promise返回完全位于C代码中的printf语句之后,这些语句是在JavaScript调用之后.有没有办法用emscripten做到这一点?

解决方法 使用ASYNCIFY_FUNCTIONS和_emscripten_async_resume.

https://kripken.github.io/emscripten-site/docs/porting/asyncify.html

总结

以上是内存溢出为你收集整理的来自C代码的异步javascript库调用完成得太晚了全部内容,希望文章能够帮你解决来自C代码的异步javascript库调用完成得太晚了所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1228804.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存