Skip to content

Commit e6dabe6

Browse files
committed
rejectWhen: Support "signal" type
1 parent 005fc7c commit e6dabe6

File tree

4 files changed

+62
-6
lines changed

4 files changed

+62
-6
lines changed

QuickPromise/Promise.qml

+12-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,15 @@ QtObject {
5656
}
5757

5858
function reject(reason) {
59-
_promise.reject(reason);
59+
if (_instanceOfSignal(reason)) {
60+
var promise = Q.promise();
61+
reason.connect(function() {
62+
promise.reject();
63+
});
64+
_promise.resolve(promise);
65+
} else {
66+
_promise.reject(reason);
67+
}
6068
}
6169

6270
/// Combine multiple promises into a single promise.
@@ -101,7 +109,9 @@ QtObject {
101109
onRejectWhenChanged: {
102110
_init();
103111
if (rejectWhen === true) {
104-
reject();
112+
reject(true);
113+
} else if (_instanceOfSignal(rejectWhen)) {
114+
reject(rejectWhen);
105115
}
106116
}
107117

README.md

+17-3
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,11 @@ Promise {
138138

139139
resolveWhen property is an alternative method to call resolve() in QML way. You may bind a binary expression, another promise, signal to the "resolveWhen" property. It may trigger the resolve() depend on its type and value.
140140

141-
*resolveWhen(binary expression)*
141+
*resolveWhen: binary expression*
142142

143143
Once the expression become true, it will trigger resolve(true).
144144

145-
*resolveWhen(signal)*
145+
*resolveWhen: signal*
146146

147147
Listen the signal, once it is triggered, it will call resolve().
148148

@@ -160,7 +160,7 @@ Promise {
160160
}
161161
```
162162

163-
*resolveWhen(promise)*
163+
*resolveWhen: promise*
164164

165165
It is equivalent to resolve(promise). It will adopt the state from the input promise object.
166166

@@ -172,6 +172,20 @@ If x is rejected, call reject().
172172

173173
If x is not settled, listen its state change. Once it is triggered, repeat the above steps.
174174

175+
**rejectWhen**
176+
177+
_rejectWhen_ property is an alternative method to call reject() in QML way. You may bind a binary expression, signal to this property. It may trigger the reject() depend on its type and value.
178+
179+
Remarks: _rejectWhen_ can not take promise as parameter
180+
181+
*rejectWhen: binary expression*
182+
183+
Once the expression become true, it will trigger reject(true).
184+
185+
*rejectWhen: signal*
186+
187+
Listen the signal, once it is triggered, it will call reject().
188+
175189

176190
Q.promise()
177191
===========
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import QtQuick 2.0
2+
import QtTest 1.0
3+
import QuickPromise 1.0
4+
5+
TestCase {
6+
name : "Promise_RejectWhen_Signal"
7+
8+
Timer {
9+
id: timer;
10+
repeat: true
11+
interval : 50
12+
}
13+
14+
Promise {
15+
id : promise
16+
rejectWhen: timer.onTriggered
17+
}
18+
19+
function test_rejectwhen_signal() {
20+
compare(promise.isRejected,false);
21+
wait(10);
22+
compare(promise.isRejected,false);
23+
timer.start();
24+
wait(10);
25+
compare(promise.isRejected,false);
26+
wait(50);
27+
compare(promise.isRejected,true);
28+
29+
}
30+
}
31+

tests/unittests/unittests.pro

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ DEFINES += SRCDIR=\\\"$$PWD/\\\" BASEDIR=\\\"$$PWD/..\\\"
1616
DISTFILES += \
1717
tst_q.qml \
1818
tst_promise_resolve_signal.qml \
19-
tst_promise_resolvewhen_signal.qml
19+
tst_promise_resolvewhen_signal.qml \
20+
tst_promise_rejectwhen_signal.qml

0 commit comments

Comments
 (0)