代码解析 static bool CreateCallbackAndPromise(napi_env env, MdCtx *context, size_t argc, size_t maxCount, napi_value callbackValue) { context->asyncType = (argc == maxCount) ? ASYNC_TYPE_CALLBACK : ASYNC_TYPE_PROMISE; if (context->asyncType == ASYNC_TYPE_CALLBACK) { if (!GetCallbackFromJSParams(env, callbackValue, &context->callback)) { LOGE("get callback failed!"); return false; } } else { napi_create_promise(env, &context->deferred, &context->promise); } return true; }
时间: 2024-04-27 13:23:21 浏览: 98
这段代码定义了一个名为 `CreateCallbackAndPromise` 的静态函数,该函数的作用是创建回调函数和 Promise 对象,并将它们保存到 `MdCtx` 结构体中。
具体来说,该函数的参数包括:
- `napi_env env`:N-API 环境变量,表示当前调用的线程的环境。
- `MdCtx *context`:一个指向 `MdCtx` 结构体的指针,表示要保存回调函数和 Promise 对象的上下文。
- `size_t argc`:一个整数,表示传入函数的参数个数。
- `size_t maxCount`:一个整数,表示最大参数个数。
- `napi_value callbackValue`:一个 N-API 值,表示回调函数的值。
该函数会首先根据传入的参数个数确定异步操作的类型,如果传入的参数个数等于最大参数个数,则表示采用回调函数形式,否则采用 Promise 对象形式。然后,该函数会根据异步操作的类型创建回调函数或 Promise 对象,并将它们保存到 `MdCtx` 结构体中。具体来说,如果采用回调函数形式,则调用 `GetCallbackFromJSParams` 函数从 JS 参数中获取回调函数的引用,并将该引用保存到 `MdCtx` 结构体中;如果采用 Promise 对象形式,则调用 `napi_create_promise` 函数创建 Promise 对象,并将该对象的 `deferred` 和 `promise` 属性保存到 `MdCtx` 结构体中。
最后,该函数返回一个布尔值,表示创建回调函数和 Promise 对象是否成功。
阅读全文