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 35df4b3d3b7fc32a24c54144500b6b6f3f3ab9de..1e68d9001f02defa439ca158bcf5003714e3f870 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 016c09602eabfc095820a301b8386f6198bf719c..fa5ce2334a35ed1d5973284dea9a9e1eafd42d22 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());