gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:40:02 25 4
gpt4 key购买 nike

我正在使用 emscripten 编译一个 C 程序,该程序使用了我编写的 JavaScript 库,并且我将它们与 --js-library 标志链接在一起。我的 C 代码调用库中的一个函数,其中有一个 Promise,在回调中我希望它将给定的结果写入一些内存,该内存已从 C 调用者传递到 JS 函数.这是一个示例(为简洁起见,我省略了 Promise 的错误捕获 catch 部分):

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)', 0, 'num', 'i32')}}}
}
});
}

程序.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]);
}

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

Calling Javascript
0
0
Promise Returned fully

但我希望能够等待 Promise 的结果,然后将其写入 C 代码,以便 Promise Returned Fully 出现在 printf 语句之前在 JavaScript 调用之后的 C 代码中。有没有办法用 emscripten 做到这一点?

最佳答案

使用 ASYNCIFY_FUNCTIONS_emscripten_async_resume

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

关于javascript - 来自 C 代码的异步 javascript 库调用完成得太晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com