/
promise.js
87 lines (78 loc) · 2.42 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
/**
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
* CKEditor 4 LTS ("Long Term Support") is available under the terms of the Extended Support Model.
*/
/* global Promise, ES6Promise */
( function() {
'use strict';
if ( window.Promise ) {
CKEDITOR.tools.promise = Promise;
} else {
var polyfillURL = CKEDITOR.getUrl( 'vendor/promise.js' ),
isAmdEnv = typeof window.define === 'function' && window.define.amd && typeof window.require === 'function';
if ( isAmdEnv ) {
return window.require( [ polyfillURL ], function( Promise ) {
CKEDITOR.tools.promise = Promise;
} );
}
CKEDITOR.scriptLoader.load( polyfillURL, function( success ) {
if ( !success ) {
return CKEDITOR.error( 'no-vendor-lib', {
path: polyfillURL
} );
}
if ( typeof window.ES6Promise !== 'undefined' ) {
return CKEDITOR.tools.promise = ES6Promise;
}
} );
}
/**
* An alias for the [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)
* object representing an asynchronous operation.
*
* It uses the native `Promise` browser implementation if it is available. For older browsers with lack of `Promise` support,
* the [`ES6-Promise`](https://github.com/stefanpenner/es6-promise) polyfill is used.
* See the [Promise Browser Compatibility table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Browser_compatibility)
* to learn more.
*
* Refer to [MDN Using Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises) guide for
* more details on how to work with promises.
*
* **NOTE:** `catch` and `finally` are reserved keywords in IE<9 browsers. Use bracket notation instead:
*
* ```js
* promise[ 'catch' ]( function( err ) {
* // ...
* } );
*
* promise[ 'finally' ]( function() {
* // ...
* } );
* ```
*
* @since 4.12.0
* @class CKEDITOR.tools.promise
*/
/**
* Creates a new `Promise` instance.
*
* ```js
* new CKEDITOR.tools.promise( function( resolve, reject ) {
* setTimeout( function() {
* var timestamp;
* try {
* timestamp = ( new Date() ).getTime();
* } catch ( e ) {
* reject( e );
* }
* resolve( timestamp );
* }, 5000 );
* } );
* ```
*
* @param {Function} resolver
* @param {Function} resolver.resolve
* @param {Function} resolver.reject
* @constructor
*/
} )();