diff --git a/pages/SyntaxCase/index.uvue b/pages/SyntaxCase/index.uvue
index e3322dbee6764b3658ff5af35ac07a9108cf85e6..8d16dba3931955677ebc26df98b09e4e1dfe91e8 100644
--- a/pages/SyntaxCase/index.uvue
+++ b/pages/SyntaxCase/index.uvue
@@ -53,7 +53,10 @@
测试callback:{{ format(testUtsClassInstanceResult['callback']) }}
测试setter:{{ format(testUtsClassSetterResult) }}
-
+
+
+
+
@@ -73,6 +76,11 @@
request,
SetterTest,
} from "../../uni_modules/uts-syntaxcase";
+ // #endif
+ // #ifdef APP-IOS
+ import {
+ testPromiseStaticMethod
+ } from "@/uni_modules/uts-syntaxcase"
// #endif
let test:Test|null = null
let id = 0
@@ -441,7 +449,12 @@
} catch (e) {
console.error("testUtsClassSetter", e);
}
- },
+ },
+ // #ifdef APP-IOS
+ testPromiseStaticMethod() {
+ testPromiseStaticMethod()
+ }
+ // #endif
}
}
\ No newline at end of file
diff --git a/uni_modules/uts-syntaxcase/utssdk/index.uts b/uni_modules/uts-syntaxcase/utssdk/index.uts
index ab501a9bf159424123fa421ed86507d45a26874d..b9bc6bf0ce8209866c9d9705f915b7b8953e2d67 100644
--- a/uni_modules/uts-syntaxcase/utssdk/index.uts
+++ b/uni_modules/uts-syntaxcase/utssdk/index.uts
@@ -1,6 +1,9 @@
import { RequestTask, SyncOptions, AsyncOptions, SyntaxResult, SyncResult, TestOptions } from "./interface.uts";
import { log } from "./utils.uts";
+// #ifdef APP-IOS
+import { UTSPromiseAggregateError, UTSPromiseFulfilledResult, UTSPromiseRejectedResult} from "DCloudUTSFoundation";
+// #endif
/**
* 导出一个属性
@@ -121,6 +124,104 @@ export class Test {
}
}
+// #ifdef APP-IOS
+// #ifdef UNI-APP-X
+
+export function testPromiseStaticMethod() {
+ let p0 = new Promise((resolve, reject) => {
+ let success = true
+ setTimeout(() => {
+ if (success) {
+ const res : SyntaxResult = {
+ name: "pomise 0",
+ }
+ resolve(res);
+ } else{
+ reject(new Error("this is promise 0 reject reasion"))
+ }
+
+ }, 1000);
+ });
+
+ let p1 = new Promise((resolve, reject) => {
+ let success = true
+ setTimeout(() => {
+ if (success) {
+ resolve(null);
+ } else{
+ reject(new Error("this is promise 1 reject reasion"))
+ }
+
+ }, 2000);
+ });
+
+ let p2 = new Promise((resolve, reject) => {
+ let success = false
+ setTimeout(() => {
+ if (success) {
+ resolve(null);
+ } else{
+ // reject(new Error("this is promise 2 reject reasion"))
+ reject(null)
+ }
+
+ }, 2500);
+ });
+
+ // test for any
+ let pt = Promise.any([p0, p1, p2]);
+ pt.then( (res) => {
+ console.log("promise.any test success", res)
+ })
+ .catch( (error: any | null) => {
+ if (error instanceof UTSPromiseAggregateError) {
+ let err = error as UTSPromiseAggregateError
+ console.log(err.name, err.message, err.errors);
+ }else {
+ console.log(error);
+ }
+ })
+
+ // test for allSettled
+ Promise.allSettled([p0, p1, p2])
+ .then((res) => {
+ res.forEach((item, index) => {
+ if (item instanceof UTSPromiseFulfilledResult) {
+ let item0 = item as UTSPromiseFulfilledResult
+ console.log(item0.value, "UTSPromiseFulfilledResult value")
+ } else if (item instanceof UTSPromiseRejectedResult) {
+ let item0 = item as UTSPromiseRejectedResult
+ console.log(item0.reason, "UTSPromiseRejectedResult reason")
+ }
+ })
+ })
+ .catch((error: any | null) => {
+ console.log(error, "rejected test for promise.allSettled")
+ })
+
+ // test for all
+ Promise.all([p0, p1, p2])
+ .then((res)=> {
+ console.log(res, res.count)
+ })
+ .catch( (error: any | null) => {
+ console.log(error, "rejected test for promise.all")
+ })
+
+ // test for race
+ Promise.race([p0, p1, p2])
+ .then((res) => {
+ console.log(res, "resolved test for promise.race");
+ })
+ .catch((error: any | null) => {
+ console.log(error, "catch test for promise.race")
+ })
+}
+
+
+// #endif
+// #endif
+
export class SetterTest {
private _nickName: string = '';
diff --git a/uni_modules/uts-tests/utssdk/Promise.uts b/uni_modules/uts-tests/utssdk/Promise.uts
new file mode 100644
index 0000000000000000000000000000000000000000..954551f098a904e2b721ce22617fa81e868b3310
--- /dev/null
+++ b/uni_modules/uts-tests/utssdk/Promise.uts
@@ -0,0 +1,332 @@
+import { describe, test, expect, Result } from './tests.uts'
+
+export function testPromise(): Result {
+ return describe("Promise", () => {
+ // #ifdef APP-IOS
+ test('constructor', () => {
+ // 常规方式
+ let p = new Promise((resolve, reject) => {
+ let success = true;
+ setTimeout(()=>{
+ if (success) {
+ resolve(2024)
+ } else{
+ let error = new Error("something going wrong")
+ reject(error)
+ }
+ }, 10);
+ });
+ p.then((res: Int) => {
+ expect(res).toEqual(2024)
+ })
+
+ // 单个函数
+ let p1 = new Promise((resolve: (value: any | null) => void) => {
+ setTimeout(function() {
+ resolve(null)
+ }, 10);
+ })
+ p1.then((res: any | null) => {
+ expect(res).toEqual(null)
+ })
+
+ // 指定函数类型
+ let p2 = new Promise((resolve: (value: string) => void, reject: (error: any | null) => void) => {
+ setTimeout(function() {
+ reject(null)
+ }, 10);
+ })
+ p2.then()
+ .catch((error: any | null) => {
+ expect(error).toEqual(null)
+ })
+ })
+
+ test('then', () => {
+ let p = new Promise((reslove, reject) => {
+ setTimeout(function() {
+ reslove("hello world")
+ }, 13);
+ })
+
+ p.then(
+ (res: string): Promise => {
+ expect(res).toEqual("hello world")
+ let p0 = new Promise((reslove,reject) => {
+ var success = true;
+ setTimeout(function() {
+ success = true;
+ if (success) {
+ reslove(res + " 2024")
+ } else{
+ reject("first then p0 reject message")
+ }
+ }, 8);
+ })
+ return p0;
+ },
+ (err: any | null): void => {
+ throw new Error("first then throw error")
+ }
+ )
+ .catch(
+ (err):string => {
+ return "first catch return message"
+ }
+ )
+ .then(
+ (res) => {
+ console.log(res)
+ expect(res).toEqual("hello world 2024")
+ }
+ )
+ .catch(
+ (err) => {
+ console.log(err, "this is seconded catch")
+ }
+ )
+ .finally(() => {
+ console.log("finally")
+ expect("finally").toEqual("finally")
+ })
+ })
+
+ test('catch', () => {
+
+ })
+
+ test('finally', () => {
+ Promise.resolve(2)
+ .finally(() => {
+ console.log("finally")
+ })
+ .then((res) => {
+ expect(res).toEqual(2)
+ })
+
+ Promise.reject(3)
+ .finally(() => {
+ console.log("finally")
+ })
+ .catch((res) => {
+ expect(res).toEqual(3)
+ })
+ })
+
+ test('resolve', () => {
+ // resolve array
+ Promise.resolve([1,2,3])
+ .then((res) => {
+ expect(res).toEqual([1,2,3])
+ })
+
+ // resolve string
+ Promise.resolve("成功")
+ .then((res) => {
+ expect(res).toEqual("成功");
+ })
+
+ // resolve null
+ Promise.resolve()
+ .then((res) => {
+ // expect(res).toEqual(null);
+ })
+
+ // resolve promise
+ const original = Promise.resolve(33)
+ const cast = Promise.resolve(original)
+ cast.then((res) => {
+ expect(res).toEqual(33);
+ })
+ // 注:此处飘红是编译器误报,实际可以判等
+ expect(original === cast).toEqual(true)
+ })
+
+ test('reject', () => {
+ // reject array
+ Promise.reject([1,2,3])
+ .catch((err) => {
+ expect(err).toEqual([1,2,3])
+ })
+
+ // reject error
+ Promise.reject(new Error("this is reject error message"))
+ .catch((err) => {
+ expect((err as Error).message).toEqual("this is reject error message");
+ })
+
+ // reject null
+ Promise.reject()
+ .catch((err) => {
+ expect(err).toEqual(null);
+ })
+
+ // reject promise
+ const original = Promise.reject(33)
+ const cast = Promise.reject(original)
+ cast.catch((err) => {
+ expect((err as Promise) === original).toEqual(true);
+ })
+ expect(original === cast).toEqual(false)
+
+ })
+
+ test('all', () => {
+ let p0 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("1");
+ }, 10);
+ })
+
+ let p1 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("2");
+ }, 10);
+ })
+
+ let p2 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("3");
+ }, 10);
+ })
+
+ let p3 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ let error = new Error("p3 reject reason")
+ reject(error);
+ }, 10);
+ })
+ // resolve
+ Promise.all([p0, p1, p2])
+ .then((res) => {
+ console.log(res);
+ expect(res).toEqual(["1", "2", "3"])
+ })
+
+ // reject
+ Promise.all([p1, p2, p3])
+ .then()
+ .catch((error) => {
+ console.log(error);
+ expect((error as Error).message).toEqual("p3 reject reason");
+ })
+ })
+
+ test('allSettled', () => {
+ let p0 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("1");
+ }, 10);
+ })
+
+ let p1 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve(null);
+ }, 10);
+ })
+
+ let p2 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ reject(null)
+ }, 10);
+ })
+
+ let p3 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ let error = new Error("p3 reject reason")
+ reject(error);
+ }, 10);
+ })
+
+ Promise.allSettled([p0, p1, p2, p3])
+ .then((res) => {
+ console.log(res);
+ let statusArr : string[] = []
+ res.forEach((item, index) => {
+ statusArr.append(item.status)
+ })
+ expect(statusArr).toEqual(["fulfilled", "fulfilled", "rejected", "rejected"])
+ })
+ })
+
+ test('any', () => {
+ let p0 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("1");
+ }, 10);
+ })
+
+ let p1 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve(null);
+ }, 15);
+ })
+
+ let p2 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ reject(null)
+ }, 10);
+ })
+
+ let p3 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ reject("error");
+ }, 12);
+ })
+
+ // test for resolve
+ Promise.any([p0, p1, p2])
+ .then((res) => {
+ console.log(res)
+ expect(res).toEqual("1");
+ })
+
+ // test for reject
+ Promise.any([p2, p3])
+ .then()
+ .catch(
+ (error: any | null) => {
+ console.log("test for promise.any error ==> ", error);
+ expect((error as UTSPromiseAggregateError).name).toEqual("AggregateError");
+ expect((error as UTSPromiseAggregateError).message).toEqual("All promises were rejected");
+ expect((error as UTSPromiseAggregateError).errors).toEqual([null, "error"]);
+ })
+ })
+
+ test('race', () => {
+ let p0 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("fast");
+ }, 10);
+ })
+
+ let p1 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ resolve("slow");
+ }, 15);
+ })
+
+ let p2 = new Promise((resolve, reject) => {
+ setTimeout(function() {
+ reject(null)
+ }, 12);
+ })
+
+ // test for resolve
+ Promise.race([p0, p1])
+ .then((res) => {
+ console.log("test for race resolve ===> ", res);
+ expect(res).toEqual("fast");
+ })
+
+ // test for reject
+ Promise.race([p1, p2])
+ .then()
+ .catch((error) => {
+ console.log("test for race reject ===> ", error);
+ expect(error).toEqual(null);
+ })
+ })
+ // #endif
+ })
+}
diff --git a/uni_modules/uts-tests/utssdk/index.uts b/uni_modules/uts-tests/utssdk/index.uts
index 2c4c08452a9239f6a18abff4a241e81e6d5cf4bd..017a512e3b584784d1a57023047b10a1f598ca12 100644
--- a/uni_modules/uts-tests/utssdk/index.uts
+++ b/uni_modules/uts-tests/utssdk/index.uts
@@ -19,9 +19,9 @@ import { testType } from './Type.uts'
export { Result } from './tests.uts'
import { testArrayBuffer } from './ArrayBuffer.uts'
import { testNativeCode } from './NativeCode.uts'
+import { testPromise} from "./Promise.uts"
-
-// Promise、Proxy、Reflect、Weakmap、WeakSet 不支持
+// Proxy、Reflect、Weakmap、WeakSet 不支持
export function runTests() : UTSJSONObject {
const ArrayRes = testArray();
const DateRes = testDate();
@@ -40,12 +40,16 @@ export function runTests() : UTSJSONObject {
const TypeRes = testType();
const JSONLargeRes = testJSONLarge();
const consoleRes = testConsole();
- const UTSJSONObjectRes = testUTSJSONObject();
+ const UTSJSONObjectRes = testUTSJSONObject();
// #ifdef APP-ANDROID || WEB
const ArrayBufferRes = testArrayBuffer();
// #endif
- const NativeCodeRes = testNativeCode();
+ const NativeCodeRes = testNativeCode();
+
+ // #ifdef APP-IOS
+ const PromiseRes = testPromise();
+ // #endif
return {
Array: ArrayRes,
Date: DateRes,
@@ -68,6 +72,9 @@ export function runTests() : UTSJSONObject {
// #ifdef APP-ANDROID || WEB
ArrayBuffer: ArrayBufferRes,
// #endif
- NativeCode: NativeCodeRes
+ NativeCode: NativeCodeRes,
+ // #ifdef APP-IOS
+ Primise: PromiseRes
+ // #endif
}
}
\ No newline at end of file