- 补全代码
function test() {
const a = Math.random() * 32;
return new Promise((resolve, reject) => {
setTimeout(() => {
if (a < 16) {
resolve(a);
} else {
reject(a);
}
}, 1000); // 假设操作需要1秒
});
}
function test1(fn, time) {
// 补全代码
return new Promise((resolve, reject) => {
let attempts = 0;
const tryFn = () => {
attempts++;
fn().then(resolve).catch(error => {
if (attempts >= time) {
reject(error);
} else {
tryFn();
}
});
};
tryFn();
});
}
test1(test, 3)
.then((result) => {
console.log('成功:', result);
})
.catch((error) => {
console.log('失败:', error);
});
- 封装一个请求会返回一个promise
// 获取id列表
export async function getIdList(a, b) {
const params = {
touchWays: [a],
channels: ['919'],
status: b,
};
try {
const result = await Service.getSearch(params); // 模拟请求接口
return result.data || [];
} catch (err) {
console.log(err);
}
}
// 获取新建id数组
const loadIdList = async () => {
getIdList(a, b).then((list) => {
idList= list.map(item => ({
label: `${item.id}-${item.name}`,
value: item.id,
}));
}).catch((err) => {
console.log(err)
});
};
- 补全代码:基础 Promise 使用
const promise = new Promise((resolve, reject) => {
// 补全代码
});
promise.then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
});
const promise = new Promise((resolve, reject) => {
const success = true; // 或者 false,根据需要
if (success) {
resolve("成功");
} else {
reject("失败");
}
});
promise.then((result) => {
console.log(result); // 输出: 成功
}).catch((error) => {
console.log(error);
});
- 补全代码:链式调用
const firstPromise = new Promise((resolve, reject) => {
// 补全代码
});
firstPromise
.then((result) => {
console.log(result); // 输出: Step 1
return "Step 2";
})
.then((result) => {
console.log(result); // 输出: Step 2
return "Step 3";
})
.then((result) => {
console.log(result); // 输出: Step 3
// 补全代码,使得在最后一个输出后再输出 'Done'
return 'Done';
})
.then((result) => {
console.log(result); // 输出: Done
});
const firstPromise = new Promise((resolve, reject) => {
resolve("Step 1");
});
firstPromise
.then((result) => {
console.log(result); // 输出: Step 1
return "Step 2";
})
.then((result) => {
console.log(result); // 输出: Step 2
return "Step 3";
})
.then((result) => {
console.log(result); // 输出: Step 3
return 'Done';
})
.then((result) => {
console.log(result); // 输出: Done
});
- 补全代码:错误处理
const faultyPromise = new Promise((resolve, reject) => {
// 补全代码
});
faultyPromise
.then((result) => {
console.log(result);
})
.catch((error) => {
console.error(error); // 应该捕获并输出错误
});
const faultyPromise = new Promise((resolve, reject) => {
const success = false; // 或者 true,根据需要
if (success) {
resolve("成功的结果");
} else {
reject("出错了");
}
});
faultyPromise
.then((result) => {
console.log(result);
})
.catch((error) => {
console.error(error); // 输出: 出错了
});
6.补全代码: Promise.all
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("结果1"), 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("结果2"), 1500);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => reject("错误"), 2000);
});
// 使用 Promise.all 处理 promise1, promise2 和 promise3
// 补全代码
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("结果1"), 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("结果2"), 1500);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => reject("错误"), 2000);
});
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // 不会被执行
})
.catch((err) => {
console.error(err); // 输出: 错误
});
7.补全代码: Promise.race
const fastPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("快的结果"), 1000);
});
const slowPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("慢的结果"), 2000);
});
// 使用 Promise.race 处理 fastPromise 和 slowPromise
// 补全代码
const fastPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("快的结果"), 1000);
});
const slowPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("慢的结果"), 2000);
});
Promise.race([fastPromise, slowPromise])
.then((result) => {
console.log(result); // 输出: 快的结果
})
.catch((err) => {
console.error(err);
});
- 实现一个函数
customPromiseAll,它的功能与Promise.all类似。
function customPromiseAll(promises) {
// 补全代码
}
// 测试代码:
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']
});
function customPromiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let completedPromises = 0;
promises.forEach((promise, index) => {
Promise.resolve(promise)
.then((value) => {
results[index] = value;
completedPromises += 1;
if (completedPromises === promises.length) {
resolve(results);
}
})
.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']
});
- 使用Promise实现每隔1秒输出1,2,3?
const arr = [1, 2, 3];
// delay 函数,返回一个 Promise,对应的延迟时间(ms)后解决
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
// 通过链式调用 delay 函数来实现每隔 1 秒输出一个数字
function printArrayElements(array) {
let promise = Promise.resolve();
array.forEach((item) => {
promise = promise.then(() => {
console.log(item);
return delay(1000);
});
});
promise.finally(() => {
console.log("完成所有输出");
});
}
printArrayElements(arr);
// 有一个红绿灯,红灯3秒亮一次,绿灯2秒亮一次,黄灯1秒亮一次,怎么让其规律的亮下去
// 等待指定毫秒数的Promise函数
function wait(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
// 模拟红绿灯亮灯的函数
async function trafficLight() {
while (true) { // 无限循环
console.log("红灯亮");
await wait(3000); // 红灯亮3秒
console.log("黄灯亮");
await wait(1000); // 黄灯亮1秒
console.log("绿灯亮");
await wait(2000); // 绿灯亮2秒
}
}
// 启动红绿灯
trafficLight().catch(error => {
console.error("发生错误:", error);
});