├── .gitignore
├── Promises
├── Assembly-CSharp-Editor-vs.csproj
├── Assembly-CSharp-Editor.csproj
├── Assembly-CSharp-vs.csproj
├── Assembly-CSharp.csproj
├── Assets
│ ├── Example.meta
│ ├── Example
│ │ ├── AllProgressController.cs
│ │ ├── AllProgressController.cs.meta
│ │ ├── AllTogetherProgressController.cs
│ │ ├── AllTogetherProgressController.cs.meta
│ │ ├── AnyProgressController.cs
│ │ ├── AnyProgressController.cs.meta
│ │ ├── CollectProgressController.cs
│ │ ├── CollectProgressController.cs.meta
│ │ ├── DeferredProgressController.cs
│ │ ├── DeferredProgressController.cs.meta
│ │ ├── Example Scene.unity
│ │ ├── Example Scene.unity.meta
│ │ ├── ExampleInitContoller.cs
│ │ ├── ExampleInitContoller.cs.meta
│ │ ├── RescueProgressController.cs
│ │ ├── RescueProgressController.cs.meta
│ │ ├── TestCube.cs
│ │ ├── TestCube.cs.meta
│ │ ├── ThenCoroutineController.cs
│ │ ├── ThenCoroutineController.cs.meta
│ │ ├── ThenProgressController.cs
│ │ └── ThenProgressController.cs.meta
│ ├── Promises.meta
│ ├── Promises
│ │ ├── Coroutine.cs
│ │ ├── Coroutine.cs.meta
│ │ ├── CoroutineRunner.cs
│ │ ├── CoroutineRunner.cs.meta
│ │ ├── Deferred.cs
│ │ ├── Deferred.cs.meta
│ │ ├── MainThreadDispatcher.cs
│ │ ├── MainThreadDispatcher.cs.meta
│ │ ├── Promise.cs
│ │ ├── Promise.cs.meta
│ │ ├── PromiseFactory.cs
│ │ ├── PromiseFactory.cs.meta
│ │ ├── PromiseService.cs
│ │ ├── PromiseService.cs.meta
│ │ ├── PromiseState.cs
│ │ └── PromiseState.cs.meta
│ ├── Tests.meta
│ └── Tests
│ │ ├── Editor.meta
│ │ ├── Editor
│ │ ├── PromiseTests.cs
│ │ └── PromiseTests.cs.meta
│ │ ├── Integration Tests.meta
│ │ └── Integration Tests
│ │ ├── CoroutineGetsExceptionTest.cs
│ │ ├── CoroutineGetsExceptionTest.cs.meta
│ │ ├── CoroutineGetsLastYieldTest.cs
│ │ ├── CoroutineGetsLastYieldTest.cs.meta
│ │ ├── CoroutineGetsLastestValueBeforeYieldBreakTest.cs
│ │ ├── CoroutineGetsLastestValueBeforeYieldBreakTest.cs.meta
│ │ ├── CoroutineGetsNullTest.cs
│ │ ├── CoroutineGetsNullTest.cs.meta
│ │ ├── CoroutineGetsValueTest.cs
│ │ ├── CoroutineGetsValueTest.cs.meta
│ │ ├── CoroutinePromiseOnFailedCalledTest.cs
│ │ ├── CoroutinePromiseOnFailedCalledTest.cs.meta
│ │ ├── CoroutinePromiseOnFulfilledCalledTest.cs
│ │ ├── CoroutinePromiseOnFulfilledCalledTest.cs.meta
│ │ ├── CoroutinePromiseOnProgressedCalledTest.cs
│ │ ├── CoroutinePromiseOnProgressedCalledTest.cs.meta
│ │ ├── CoroutinePromiseRescueTest.cs
│ │ ├── CoroutinePromiseRescueTest.cs.meta
│ │ ├── CoroutinePromiseThenTest.cs
│ │ ├── CoroutinePromiseThenTest.cs.meta
│ │ ├── CoroutinePromiseWithArgsTest.cs
│ │ ├── CoroutinePromiseWithArgsTest.cs.meta
│ │ ├── PromiseCleansUpOnFailedTest.cs
│ │ ├── PromiseCleansUpOnFailedTest.cs.meta
│ │ ├── PromiseCleansUpOnFulfilledTest.cs
│ │ ├── PromiseCleansUpOnFulfilledTest.cs.meta
│ │ ├── PromiseOnFailedCalledTest.cs
│ │ ├── PromiseOnFailedCalledTest.cs.meta
│ │ ├── PromiseOnFulfilledCalledTest.cs
│ │ ├── PromiseOnFulfilledCalledTest.cs.meta
│ │ ├── PromiseOnProgressedCalledTest.cs
│ │ ├── PromiseOnProgressedCalledTest.cs.meta
│ │ ├── Tests.unity
│ │ └── Tests.unity.meta
├── Library
│ ├── AnnotationManager
│ ├── AssetVersioning.db
│ ├── BuildPlayer.prefs
│ ├── BuildSettings.asset
│ ├── EditorUserSettings.asset
│ ├── LibraryFormatVersion.txt
│ ├── MonoManager.asset
│ └── ProjectSettings.asset
├── ProjectSettings
│ ├── AudioManager.asset
│ ├── DynamicsManager.asset
│ ├── EditorBuildSettings.asset
│ ├── EditorSettings.asset
│ ├── GraphicsSettings.asset
│ ├── InputManager.asset
│ ├── NavMeshAreas.asset
│ ├── NavMeshLayers.asset
│ ├── NetworkManager.asset
│ ├── Physics2DSettings.asset
│ ├── ProjectSettings.asset
│ ├── QualitySettings.asset
│ ├── TagManager.asset
│ └── TimeManager.asset
├── Promises-Unity-csharp.sln
├── Promises-Unity.sln
├── Promises-csharp.sln
└── Promises.sln
├── Tests
├── Libraries
│ ├── nspec
│ │ ├── NSpec.dll
│ │ ├── NSpec.dll.mdb
│ │ ├── NSpecRunner.exe
│ │ ├── NSpecRunner.exe.config
│ │ └── NSpecRunner.exe.mdb
│ └── nunit.framework.dll
├── Properties
│ └── AssemblyInfo.cs
├── Tests.csproj
├── Tests.sln
└── Tests
│ ├── TestHelper.cs
│ ├── describe_All.cs
│ ├── describe_Any.cs
│ ├── describe_Collect.cs
│ ├── describe_Promise.cs
│ ├── describe_Rescue.cs
│ └── describe_Then.cs
└── runTests.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | test-results
2 | bin
3 | *.userprefs
4 |
5 | ### Unity
6 | [Bb]uild
7 | [Cc]ache
8 | [Mm]etadata/
9 | [Tt]emp/
10 | [Oo]bj/
11 | assetDatabase3
12 | expandedItems
13 | guidmapper
14 | FailedAssetImports.txt
15 | AssetImportState
16 | EditorUserBuildSettings.asset
17 | ScriptMapper
18 | AssetServerCacheV3
19 | InspectorExpandedItems.asset
20 | ScriptAssemblies/
21 | CurrentLayout.dwlt
22 | *.unityproj
23 | Promises/Assets/UnityTestTools
24 | UnityTestTools.meta
25 | Promises/Library/ShaderCache
26 | shadercompiler-64bit*
27 | ShaderCache.db
28 | Promises/Library/GiCache
29 |
--------------------------------------------------------------------------------
/Promises/Assembly-CSharp-Editor-vs.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 10.0.20506
7 | 2.0
8 | {DBE831DB-43D2-FC62-AE1C-4DE8C845CAA0}
9 | Library
10 | Properties
11 |
12 | Assembly-CSharp-Editor
13 | v3.5
14 | 512
15 | Assets
16 |
17 |
18 | true
19 | full
20 | false
21 | Temp\bin\Debug\
22 | DEBUG;TRACE;UNITY_4_6_0;UNITY_4_6;UNITY_IPHONE;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_WWW;ENABLE_IMAGEEFFECTS;UNITY_IPHONE_API;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_GAMECENTER;UNITY_IOS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;DEVELOPMENT_BUILD;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_OSX;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;ENABLE_DUCK_TYPING
23 | prompt
24 | 4
25 | 0169
26 |
27 |
28 | pdbonly
29 | true
30 | Temp\bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | 0169
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
43 |
44 |
45 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/UnityEngine.UI.dll
103 |
104 |
105 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/Editor/UnityEditor.UI.dll
106 |
107 |
108 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NSubstitute/NSubstitute.dll
109 |
110 |
111 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/Mono.Cecil.dll
112 |
113 |
114 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/Mono.Cecil.Mdb.dll
115 |
116 |
117 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.core.dll
118 |
119 |
120 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.core.interfaces.dll
121 |
122 |
123 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.framework.dll
124 |
125 |
126 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.Graphs.dll
127 |
128 |
129 |
130 |
131 | {078E3FFF-5273-27E8-12B5-6C83568FAB85} Assembly-CSharp-vs
132 |
133 |
134 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/Promises/Assembly-CSharp-Editor.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 10.0.20506
7 | 2.0
8 | {DBE831DB-43D2-FC62-AE1C-4DE8C845CAA0}
9 | Library
10 | Properties
11 |
12 | Assembly-CSharp-Editor
13 | v3.5
14 | 512
15 | Assets
16 |
17 |
18 | true
19 | full
20 | false
21 | Temp\bin\Debug\
22 | DEBUG;TRACE;UNITY_4_6_0;UNITY_4_6;UNITY_IPHONE;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_WWW;ENABLE_IMAGEEFFECTS;UNITY_IPHONE_API;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_GAMECENTER;UNITY_IOS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;DEVELOPMENT_BUILD;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_OSX;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;ENABLE_DUCK_TYPING
23 | prompt
24 | 4
25 | 0169
26 |
27 |
28 | pdbonly
29 | true
30 | Temp\bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | 0169
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
43 |
44 |
45 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/UnityEngine.UI.dll
103 |
104 |
105 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/Editor/UnityEditor.UI.dll
106 |
107 |
108 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NSubstitute/NSubstitute.dll
109 |
110 |
111 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/Mono.Cecil.dll
112 |
113 |
114 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/Mono.Cecil.Mdb.dll
115 |
116 |
117 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.core.dll
118 |
119 |
120 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.core.interfaces.dll
121 |
122 |
123 | /Users/sschmid/Work/sschmid/Dev/Unity/Libs/Promises/Promises/Assets/UnityTestTools/UnitTesting/Editor/NUnit/Libs/nunit.framework.dll
124 |
125 |
126 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.Graphs.dll
127 |
128 |
129 |
130 |
131 | {078E3FFF-5273-27E8-12B5-6C83568FAB85} Assembly-CSharp
132 |
133 |
134 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/Promises/Assembly-CSharp-vs.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 10.0.20506
7 | 2.0
8 | {078E3FFF-5273-27E8-12B5-6C83568FAB85}
9 | Library
10 | Properties
11 |
12 | Assembly-CSharp
13 | v3.5
14 | 512
15 | Assets
16 |
17 |
18 | true
19 | full
20 | false
21 | Temp\bin\Debug\
22 | DEBUG;TRACE;UNITY_4_6_0;UNITY_4_6;UNITY_IPHONE;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_WWW;ENABLE_IMAGEEFFECTS;UNITY_IPHONE_API;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_GAMECENTER;UNITY_IOS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;DEVELOPMENT_BUILD;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_OSX;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE
23 | prompt
24 | 4
25 | 0169
26 |
27 |
28 | pdbonly
29 | true
30 | Temp\bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | 0169
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
43 |
44 |
45 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/UnityEngine.UI.dll
123 |
124 |
125 |
126 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/Promises/Assembly-CSharp.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 10.0.20506
7 | 2.0
8 | {078E3FFF-5273-27E8-12B5-6C83568FAB85}
9 | Library
10 | Properties
11 |
12 | Assembly-CSharp
13 | v3.5
14 | 512
15 | Assets
16 |
17 |
18 | true
19 | full
20 | false
21 | Temp\bin\Debug\
22 | DEBUG;TRACE;UNITY_4_6_0;UNITY_4_6;UNITY_IPHONE;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_WWW;ENABLE_IMAGEEFFECTS;UNITY_IPHONE_API;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_GAMECENTER;UNITY_IOS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;DEVELOPMENT_BUILD;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_OSX;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE
23 | prompt
24 | 4
25 | 0169
26 |
27 |
28 | pdbonly
29 | true
30 | Temp\bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | 0169
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
43 |
44 |
45 | /Applications/Unity 4.6/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 | /Applications/Unity 4.6/Unity.app/Contents/UnityExtensions/Unity/GUISystem/4.6.0/UnityEngine.UI.dll
123 |
124 |
125 |
126 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/Promises/Assets/Example.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5e4d622ffe00a4592a4cf52796c068d0
3 | folderAsset: yes
4 | DefaultImporter:
5 | userData:
6 |
--------------------------------------------------------------------------------
/Promises/Assets/Example/AllProgressController.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using Promises;
3 | using System.Threading;
4 | using System;
5 | using System.Collections.Generic;
6 |
7 | public class AllProgressController : MonoBehaviour {
8 | void Start() {
9 | transform.localScale = Vector3.zero;
10 | GetAllPromise().QueueOnMainThread(
11 | result => new GameObject("All done"),
12 | null,
13 | progress => transform.localScale = new Vector3(progress * 10, 1f, 1f)
14 | );
15 | }
16 |
17 | public static Promise