yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
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
define([
    "../_base/array",
    "../Deferred",
    "../when"
], function(array, Deferred, when){
    "use strict";
 
    // module:
    //      dojo/promise/first
 
    var forEach = array.forEach;
 
    return function first(objectOrArray){
        // summary:
        //      Takes multiple promises and returns a new promise that is fulfilled
        //      when the first of these promises is fulfilled.
        // description:
        //      Takes multiple promises and returns a new promise that is fulfilled
        //      when the first of these promises is fulfilled. Canceling the returned
        //      promise will *not* cancel any passed promises. The promise will be
        //      fulfilled with the value of the first fulfilled promise.
        // objectOrArray: Object|Array?
        //      The promises are taken from the array or object values. If no value
        //      is passed, the returned promise is resolved with an undefined value.
        // returns: dojo/promise/Promise
 
        var array;
        if(objectOrArray instanceof Array){
            array = objectOrArray;
        }else if(objectOrArray && typeof objectOrArray === "object"){
            array = [];
            for(var key in objectOrArray){
                if(Object.hasOwnProperty.call(objectOrArray, key)){
                    array.push(objectOrArray[key]);
                }
            }
        }
 
        if(!array || !array.length){
            return new Deferred().resolve();
        }
 
        var deferred = new Deferred();
        forEach(array, function(valueOrPromise){
            when(valueOrPromise, deferred.resolve, deferred.reject);
        });
        return deferred.promise;    // dojo/promise/Promise
    };
});