实现一个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的值被覆盖