diff --git a/zh-cn/application-dev/reference/apis/js-apis-taskpool.md b/zh-cn/application-dev/reference/apis/js-apis-taskpool.md index ee10746563fe247ab24658a01fc503d9841ba538..89d050ecfc85ab531f3e7e3b4b04dd8cc9de4248 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-taskpool.md +++ b/zh-cn/application-dev/reference/apis/js-apis-taskpool.md @@ -13,7 +13,7 @@ ## 导入模块 -```js +```ts import taskpool from '@ohos.taskpool'; ``` @@ -58,9 +58,9 @@ Task的构造函数。 **示例:** -```js +```ts +@Concurrent function func(args) { - "use concurrent" console.log("func: " + args); return args; } @@ -110,9 +110,9 @@ execute(func: Function, ...args: unknown[]): Promise\ **示例:** -```js +```ts +@Concurrent function func(args) { - "use concurrent" console.log("func: " + args); return args; } @@ -158,9 +158,9 @@ execute(task: Task, priority?: Priority): Promise\ **示例:** -```js +```ts +@Concurrent function func(args) { - "use concurrent" console.log("func: " + args); return args; } @@ -199,9 +199,9 @@ cancel(task: Task): void **示例:** -```js +```ts +@Concurrent function func(args) { - "use concurrent" console.log("func: " + args); return args; } @@ -209,7 +209,11 @@ function func(args) { async function taskpoolTest() { let task = new taskpool.Task(func, 100); let value = await taskpool.execute(task); - taskpool.cancel(task); + try { + taskpool.cancel(task); + } catch (e) { + console.log("taskpool.cancel occur error:" + e); + } } taskpoolTest(); @@ -221,12 +225,19 @@ taskpoolTest(); 序列化支持类型包括:All Primitive Type(不包括symbol)、Date、String、RegExp、Array、Map、Set、Object、ArrayBuffer、TypedArray。 ### 注意事项 -taskpool任务只支持引用入参传递或者import的变量,不支持使用闭包变量。 +- 仅支持在Stage模型且module的compileMode为esmodule的project中使用taskpool api。确认module的compileMode方法:查看当前module的build-profile.json5,在buildOption中补充"compileMode": "esmodule"。 +- taskpool任务只支持引用入参传递或者import的变量,不支持使用闭包变量,使用装饰器@Concurrent进行拦截。 +- taskpool任务只支持普通函数或者async函数,不支持类成员函数或者匿名函数,使用装饰器@Concurrent进行拦截。 +- 装饰器@Concurrent仅支持在ets文件使用,在ts文件中创建taskpool任务需使用"use concurrent"。 -```js -// 1. 引用入参传递 +### 简单使用 + +**示例一** + +```ts +// 支持普通函数、引用入参传递 +@Concurrent function func(args) { - "use concurrent" console.log("func: " + args); return args; } @@ -245,17 +256,19 @@ async function taskpoolTest() { taskpoolTest(); ``` -```js -// 2. 引用import变量 +**示例二** -// b.ts +```ts +// b.ets export var c = 2000; +``` +```ts +// 引用import变量 +// a.ets(与b.ets位于同一目录中) +import { c } from "./b"; -// a.ts(与b.ts同目录) -import { c } from './b' - +@Concurrent function test(a) { - "use concurrent" console.log(a); console.log(c); return a; @@ -273,4 +286,64 @@ async function taskpoolTest() { } taskpoolTest(); +``` + +**示例三** + +```ts +// 支持async函数 +@Concurrent +async function task() { + let ret = await Promise.all([ + new Promise(resolve => setTimeout(resolve, 1000, "resolved")) + ]); + return ret; +} + +async function taskpoolTest() { + taskpool.execute(task).then((result) => { + console.log("TaskPoolTest task result: " + result); + }); +} + +taskpoolTest(); +``` + +**示例四** + +```ts +// 在ts文件中创建taskpool任务需使用"use concurrent" +// c.ts +function test1(n) { + "use concurrent" + return n; +} +export async function taskpoolTest1() { + console.log("taskpoolTest1 start"); + var task = new taskpool.Task(test1, 100); + var result = await taskpool.execute(task); + console.log("taskpoolTest1 result:" + result); +} + +async function test2() { + "use concurrent" + var ret = await Promise.all([ + new Promise(resolve => setTimeout(resolve, 1000, "resolved")) + ]); + return ret; +} +export async function taskpoolTest2() { + console.log("taskpoolTest2 start"); + taskpool.execute(test2).then((result) => { + console.log("TaskPoolTest2 result: " + result); + }); +} +``` + +```ts +// a.ets(与c.ts在同一目录中) +import { taskpoolTest1, taskpoolTest2 } from "./c"; + +taskpoolTest1(); +taskpoolTest2(); ``` \ No newline at end of file