From 0a741c8d39155dacccd112867c1e0d7a4ee12e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=8F=BD=E5=92=8C=E7=8C=AA=E6=89=92?= Date: Thu, 20 Mar 2025 09:42:39 +0800 Subject: [PATCH] =?UTF-8?q?read=20=E5=A2=9E=E5=8A=A0=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 兔叽和猪扒 Change-Id: Idd943a5102887178e803d79bdf7e0cd5ca4307d5 --- .../js/src/mod_fs/ani/ets/@ohos.file.fs.ets | 74 +++++++++---------- .../js/src/mod_fs/properties/ani/read_ani.cpp | 5 ++ 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets index 35df4b3d..1e68d900 100644 --- a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets +++ b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets @@ -286,35 +286,33 @@ function write(fd: number, buffer: string | ArrayBuffer, callback: AsyncCallback }); } -function read(fd: number, buffer: ArrayBuffer): Promise { - return new Promise((resolve: (result: number) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(FileIoImpl.readSync, fd, buffer); - promise.then((ret: NullishType): void => { - if (ret === null || ret === undefined) { - let e = new BusinessError(); - e.code = -1; - reject(e); - } else { - let r = ret as number; - resolve(r); - } - }); - }); +function readSync(fd: number, buffer: ArrayBuffer, options?: ReadOptions): number { + return FileIoImpl.readSync(fd, buffer, options) } -function read(fd: number, buffer: ArrayBuffer, options: ReadOptions): Promise { +function read(fd: number, buffer: ArrayBuffer, options?: ReadOptions): Promise { return new Promise((resolve: (result: number) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(FileIoImpl.readSync, fd, buffer, options); - promise.then((ret: NullishType): void => { - if (ret === null || ret === undefined) { - let e = new BusinessError(); - e.code = -1; + if (options === undefined) { + let promise = taskpool.execute((fd: number, buffer: ArrayBuffer):number => { + return FileIoImpl.readSync(fd, buffer); + }, fd, buffer); + promise.then((ret: NullishType) => { + let result = ret as number; + resolve(result); + }).catch((e: BusinessError): void => { reject(e); - } else { - let r = ret as number; - resolve(r); - } - }); + }); + } else { + let promise = taskpool.execute((fd: number, buffer: ArrayBuffer, options: ReadOptions):number=> { + return FileIoImpl.readSync(fd, buffer, options) + }, fd, buffer, options); + promise.then((ret: NullishType) => { + let result = ret as number; + resolve(result); + }).catch((e: BusinessError): void => { + reject(e); + }); + } }); } @@ -322,14 +320,11 @@ function read(fd: number, buffer: ArrayBuffer, callback: AsyncCallback { let e = new BusinessError(); - if (ret === null || ret === undefined) { - e.code = -1; - callback(e, 0); - } else { - e.code = 0; - let r = ret as number; - callback(e, r); - } + e.code = 0; + let result = ret as number; + callback(e, result); + }).catch((e: BusinessError): void => { + callback(e, 0); }); } @@ -337,14 +332,11 @@ function read(fd: number, buffer: ArrayBuffer, options: ReadOptions, callback: A let promise = taskpool.execute(FileIoImpl.readSync, fd, buffer, options); promise.then((ret: NullishType): void => { let e = new BusinessError(); - if (ret === null || ret === undefined) { - e.code = -1; - callback(e, 0); - } else { - e.code = 0; - let r = ret as number; - callback(e, r); - } + e.code = 0; + let result = ret as number; + callback(e, result); + }).catch((e: BusinessError): void => { + callback(e, 0); }); } diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/read_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/read_ani.cpp index 016c0960..fa5ce233 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/read_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/read_ani.cpp @@ -17,6 +17,7 @@ #include #include "ani_helper.h" +#include "error_handler.h" #include "filemgmt_libhilog.h" #include "read_core.h" #include "type_converter.h" @@ -57,18 +58,22 @@ ani_double ReadAni::ReadSync( auto [succBuf, arrayBuffer] = TypeConverter::ToArrayBuffer(env, buffer); if (!succBuf) { HILOGE("Failed to resolve arrayBuffer!"); + ErrorHandler::Throw(env, EINVAL); return -1; } auto [succOp, op] = ToReadOptions(env, options); if (!succOp) { HILOGE("Failed to resolve options!"); + ErrorHandler::Throw(env, EINVAL); return -1; } auto ret = ReadCore::DoRead(static_cast(fd), arrayBuffer, op); if (!ret.IsSuccess()) { HILOGE("Read file content failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return -1; } return static_cast(ret.GetData().value()); -- Gitee