/
promise.js
91 lines (83 loc) · 2.06 KB
/
promise.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
var assert = require("assert"),
when = require("../promise").when,
whenPromise = require("../promise").whenPromise,
defer = require("../promise").defer,
Step = require("../step").Step;
exports.testSpeedPlainValue = function(){
for(var i = 0; i < 1000; i++){
when(3, function(){
});
}
};
exports.testSpeedPromise = function(){
var deferred = defer();
for(var i = 0; i < 1000; i++){
when(deferred.promise, function(){
});
}
deferred.resolve(3);
};
exports.testWhenPromiseRejectHandled = function(){
// The inner whenPromise doesn't have a rejectCallback, but the outer one does.
// This means the error then *is* handled, but the inner whenPromise doesn't know about that.
// This shouldn't result in an uncaught exception thrown by the promise library.
whenPromise(true, function(){
return whenPromise((function(){
var deferred = defer();
deferred.reject({});
return deferred.promise;
})());
}).then(null, function(){});
};
function veryDeferred(){
var deferred = defer();
setTimeout(function(){
deferred.resolve(true);
}, 100);
return deferred.promise;
}
function veryDeferred(){
var deferred = defer();
setTimeout(function(){
deferred.resolve(true);
}, 100);
return deferred.promise;
}
exports.testStep = function(){
var deferred = defer();
Step({foo: 'bar'}, [
function(){
console.log('S1');
assert.ok(this.foo === 'bar');
return false;
},
function(result){
console.log('S2');
assert.ok(result === false);
this.foo = 'baz';
return veryDeferred();
},
function(result){
console.log('S3');
assert.ok(this.foo === 'baz');
assert.ok(result === true);
throw Error('Catchme!');
},
function(result){
console.log('S4');
assert.ok(result instanceof Error);
assert.ok(result.message === 'Catchme!');
deferred.resolve(true);
// return undefined;
},
function(result){
console.log('S5', result);
// Should never come here
deferred.reject(false);
assert.ok(true === false);
},
]);
return deferred.promise;
};
if (require.main === module)
require("patr/runner").run(exports);