diff --git a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp index 8d24febd6e617bfc38fb4c69c72580df52aa767b..1c936f600aa9f4a11369b58d3c76e83a35ab0fc9 100644 --- a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp @@ -103,48 +103,55 @@ static napi_value FileAccessHelperConstructor(napi_env env, napi_callback_info i return thisVar; } +static napi_value GetCreateHelper(napi_env env, napi_callback_info info, int number) +{ + napi_value result = nullptr; + napi_value cons = nullptr; + + size_t requireArgc = number; + size_t argc = number; + napi_value args[number] = {nullptr}; + if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) { + return nullptr; + } + + if (argc > requireArgc || napi_get_reference_value(env, g_constructorRef, &cons) != napi_ok) { + HILOG_ERROR("Wrong argument count%{public}zu. or g_constructorRef reference is fail", argc); + return nullptr; + } + + if (napi_new_instance(env, cons, argc, args, &result) != napi_ok) { + return nullptr; + } + + return result; +} + napi_value AcquireFileAccessHelperWrap(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { + if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::THREE)) { NapiError(ERR_PARAM_NUMBER).ThrowErr(env); return nullptr; } napi_value result = nullptr; napi_value cons = nullptr; - if (funcArg.GetArgc() == NARG_CNT::ONE) { - size_t requireArgc = ARGS_ONE; - size_t argc = ARGS_ONE; - napi_value args[ARGS_ONE] = {nullptr}; - if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) { - return nullptr; - } - - if (argc > requireArgc || napi_get_reference_value(env, g_constructorRef, &cons) != napi_ok) { - HILOG_ERROR("Wrong argument count%{public}zu. or g_constructorRef reference is fail", argc); - return nullptr; - } - if (napi_new_instance(env, cons, ARGS_ONE, args, &result) != napi_ok) { - return nullptr; - } + if (funcArg.GetArgc() == NARG_CNT::ONE) { + result = GetCreateHelper(env, info, ARGS_ONE); } else if (funcArg.GetArgc() == NARG_CNT::TWO) { - size_t requireArgc = ARGS_TWO; - size_t argc = ARGS_TWO; - napi_value args[ARGS_TWO] = {nullptr}; - if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) { - return nullptr; - } - - if (argc > requireArgc || napi_get_reference_value(env, g_constructorRef, &cons) != napi_ok) { - HILOG_ERROR("Wrong argument count%{public}zu. or g_constructorRef reference is fail", argc); - return nullptr; + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { + result = GetCreateHelper(env, info, ARGS_ONE); } - - if (napi_new_instance(env, cons, ARGS_TWO, args, &result) != napi_ok) { + result = GetCreateHelper(env, info, ARGS_TWO); + } else if (funcArg.GetArgc() == NARG_CNT::THREE) { + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { return nullptr; } + result = GetCreateHelper(env, info, ARGS_TWO); } if (!IsTypeForNapiValue(env, result, napi_object)) {