【240910】实现一个Promise.all &

59 阅读1分钟

实现一个Promise.all

function customPromiseAll(promises) {
    return new Promise((resolve, reject) => {
        if (!Array.isArray(promises)) {
            return reject(new TypeError('Argument is not an iterable'));
        }

        let resolvedCounter = 0;
        const promiseNum = promises.length;
        const resolvedResults = new Array(promiseNum);

        if (promiseNum === 0) {
            return resolve([]);
        }

        promises.forEach((promise, index) => {
            Promise.resolve(promise)
                .then((value) => {
                    resolvedCounter++;
                    resolvedResults[index] = value;
                    if (resolvedCounter === promiseNum) {
                        resolve(resolvedResults);
                    }
                })
                .catch((error) => {
                    reject(error);
                });
        });
    });
}


const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'foo');
});

customPromiseAll([promise1, promise2, promise3])
    .then((values) => {
        console.log(values); // [3, 42, "foo"]
    })
    .catch((error) => {
        console.error(error);
    });

合并两个有序数组

var merge = function(nums1, m, nums2, n) {
    let p1 = m - 1, p2 = n - 1, p = m + n - 1;
    while (p2 >= 0) { 
        if (p1 >= 0 && nums1[p1] > nums2[p2]) {
            nums1[p--] = nums1[p1--];
        } else {
            nums1[p--] = nums2[p2--];
        }
    }
};

解题思路:

  • 双尾指针做比较,从头比较会出现nums1的值被覆盖