之所以遇到这种情况,是因为调用ffi.Callback时,如果未给ffi.Callback返回值加个引用的话,那么就可能会被垃圾回收掉。
做法就是每次返回时,加一个全局引用。为了方便使用,可以把调用ffi.Callback和添加全局引用封装在一个函数里面,方便调用。
比如:
function BuildCallBack(callback) {
let ffiCallback = ffi.Callback(
'string', ['string'],
function (str) {
callback(JSON.parse(str))
});
global.sharedObject.globalCallbacks.push(ffiCallback);
return ffiCallback ;
}