diff --git a/js_concurrent_module/common/helper/napi_helper.cpp b/js_concurrent_module/common/helper/napi_helper.cpp index 881545eecad9428a42fa69766c21de432d5d2dcc..4c180f45e66f7a018aeb02f1aadd59ec7eface3a 100644 --- a/js_concurrent_module/common/helper/napi_helper.cpp +++ b/js_concurrent_module/common/helper/napi_helper.cpp @@ -321,7 +321,10 @@ napi_value NapiHelper::CreateObject(napi_env env) napi_value NapiHelper::CreatePromise(napi_env env, napi_deferred* deferred) { napi_value promise = nullptr; - napi_create_promise(env, deferred, &promise); + napi_status status = napi_create_promise(env, deferred, &promise); + if (status != napi_ok || !IsNotUndefined(env, promise)) { + return nullptr; + } return promise; } diff --git a/js_concurrent_module/taskpool/task.cpp b/js_concurrent_module/taskpool/task.cpp index c5dff18f756d9eea623ff09cbf245e34049c73f2..e7ebc31b655a71e098bcbdc5a210ccf622320d25 100644 --- a/js_concurrent_module/taskpool/task.cpp +++ b/js_concurrent_module/taskpool/task.cpp @@ -259,7 +259,13 @@ napi_value Task::GetTaskInfoPromise(napi_env env, napi_value task, TaskType task return nullptr; } UpdateTaskType(taskType); - return NapiHelper::CreatePromise(env, &taskInfo->deferred); + napi_value promise = NapiHelper::CreatePromise(env, &taskInfo->deferred); + if (promise == nullptr) { + HILOG_ERROR("taskpool:: create promise failed."); + ErrorHelper::ThrowError(env, ErrorHelper::TYPE_ERROR, "create promise failed."); + return nullptr; + } + return ; } TaskInfo* Task::GetTaskInfo(napi_env env, napi_value napiTask, Priority priority) diff --git a/js_concurrent_module/taskpool/taskpool.cpp b/js_concurrent_module/taskpool/taskpool.cpp index 7a3163b9a0d18e43e3401425c3a493a2d776682e..79f87b1bea4baf6c8983e167cf2b8bfa593fdedf 100644 --- a/js_concurrent_module/taskpool/taskpool.cpp +++ b/js_concurrent_module/taskpool/taskpool.cpp @@ -215,6 +215,7 @@ napi_value TaskPool::Execute(napi_env env, napi_callback_info cbinfo) napi_value promise = task->GetTaskInfoPromise(env, args[0], TaskType::COMMON_TASK, static_cast(priority)); if (promise == nullptr) { + HILOG_ERROR("taskpool::Execute promise is nullptr"); return nullptr; } ExecuteTask(env, task, static_cast(priority)); @@ -231,6 +232,11 @@ napi_value TaskPool::Execute(napi_env env, napi_callback_info cbinfo) return nullptr; } napi_value promise = NapiHelper::CreatePromise(env, &task->currentTaskInfo_->deferred); + if (promise == nullptr) { + ErrorHelper::ThrowError(env, ErrorHelper::TYPE_ERROR, "create promise failed."); + HILOG_ERROR("taskpool:: Execute create promise failed."); + return nullptr; + } ExecuteTask(env, task); return promise; } @@ -301,14 +307,21 @@ napi_value TaskPool::ExecuteDelayed(napi_env env, napi_callback_info cbinfo) } task->UpdateTaskType(TaskType::COMMON_TASK); - uv_loop_t* loop = NapiHelper::GetLibUV(env); - uv_update_time(loop); - uv_timer_t* timer = new uv_timer_t; - uv_timer_init(loop, timer); TaskMessage* taskMessage = new TaskMessage(); taskMessage->priority = static_cast(priority); taskMessage->taskId = task->taskId_; napi_value promise = NapiHelper::CreatePromise(env, &taskMessage->deferred); + if (promise == nullptr) { + delete taskMessage; + taskMessage = nullptr; + ErrorHelper::ThrowError(env, ErrorHelper::TYPE_ERROR, "create promise failed."); + HILOG_ERROR("taskpool:: ExecuteDelayed create promise failed."); + return nullptr; + } + uv_loop_t* loop = NapiHelper::GetLibUV(env); + uv_update_time(loop); + uv_timer_t* timer = new uv_timer_t; + uv_timer_init(loop, timer); timer->data = taskMessage; std::string strTrace = "ExecuteDelayed: taskId: " + std::to_string(task->taskId_); @@ -351,6 +364,13 @@ napi_value TaskPool::ExecuteGroup(napi_env env, napi_value napiTaskGroup, Priori napi_ref arrRef = NapiHelper::CreateReference(env, resArr, 1); groupInfo->resArr = arrRef; napi_value promise = NapiHelper::CreatePromise(env, &groupInfo->deferred); + if (promise == nullptr) { + delete groupInfo; + groupInfo = nullptr; + ErrorHelper::ThrowError(env, ErrorHelper::TYPE_ERROR, "create promise failed."); + HILOG_ERROR("taskpool:: ExecuteGroup promise is nullptr"); + return nullptr; + } { std::lock_guard lock(taskGroup->taskGroupMutex_); if (taskGroup->taskNum_ == 0) {