0

我有以下 AssmemblyScript 模块:

export function add(a: i32, b: i32): i32 {
  return a + b;
}

export function printNum(a: string): f64 {
  return parseFloat(a);
}

生成的asc assembly/index.ts --target release

然后我在我的主机 TypeScript 文件中使用它:

import fs from "fs";
import loader from "@assemblyscript/loader";
import { join } from "path";

const wasmModule = loader.instantiateSync(fs.readFileSync(join(__dirname, "..", "/build/untouched.wasm")), {});
module.exports = wasmModule.exports;

我可以打电话add就好了:

const { add, printNum } = require("./wasm");
console.log(add(1, 2)); // correctly prints 3

但是,尝试调用printNum不会使我的 Node 进程崩溃,但进程会成功退出,而不会调用代码:

    const [row] = await db.getWhere({});
    console.log("balance", row.balance, typeof row.balance); // balance 123456789123456789.123456789123456789 string
    try {
      const result = printNum(row.balance);
      console.log("result", result);
    } catch (error) {
      console.log(error);
    }
    console.log(add(1, 2));

    console.log("done");

printNum函数从未被调用,或者它被调用并且内部错误?我在 中没有收到任何错误catch,并且后续两个 console.logs 永远不会被调用

如果我注释掉整个printNumtry/catch,接下来的两个 console.logs 将被执行

我从哪里开始调试呢?或者任何人都可以在我的 AssemblyScriptprintNum方法本身中发现任何可能导致这种情况的错误吗?

4

1 回答 1

1

printNum接受一个指向字符串的指针。要创建一个新字符串,请使用__newString并将返回的指针传递给printNum.

const { add, printNum, __newString } = require("./wasm");
const result = printNum(__newString(row.balance));

参考

于 2021-05-26T13:24:21.347 回答