欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Promise实用案例

Promise实用案例

2025/5/16 11:52:16 来源:https://blog.csdn.net/qq_42825643/article/details/147985976  浏览:    关键词:Promise实用案例

1.并行执行多个异步任务

Promise.all([p1, p2, p3]).then((result) => {console.log(result);
});

2.可手动取消的异步任务

function canCancelTask(taskFn) {const { promise, resolve, reject } = Promise.withResolvers();let isCancelled = false;const cancel = (reason) => {if (!isCancelled) {isCancelled = true;reject(new Error(reason)); // 主动触发拒绝}};// 执行异步任务taskFn(resolve, reject);return { promise, cancel };
}const asyncFn = (resolve, reject) => {setTimeout(() => {resolve("success");}, 5000);
};
// 使用
const delayedTask = canCancelTask(asyncFn);
delayedTask.promise.then((result) => {console.log(result);
});
delayedTask.cancel(); // 取消任务后不再打印

3.超时取消的异步任务

const fetchWithTimeout = (url, timeout) => {return Promise.race([fetch(url),new Promise((_, reject) =>setTimeout(() => reject(new Error("请求超时")), timeout)),]);
};

4.等待用户确认后再执行操作

function confirm() {return new Promise((resolve, reject) => {const result = window.confirm("确定要删除吗?");if (result) {resolve("用户确认");} else {reject("用户取消");}});
}
// 使用
confirm().then((result) => {console.log(result);
});

5.多个异步任务的串行执行

const tasks = [() => api.task1(), () => api.task2()];
tasks.reduce((currentPromise, nextTask) => currentPromise.then(() => nextTask()), Promise.resolve()
);

6.限制并发数

async function limitConcurrency(tasks, limit) {const result = [];const executing = new Set();for (const task of tasks) {const p = task().then((res) => {executing.delete(p);return res;});executing.add(p);result.push(p);if (executing.size >= limit) {await Promise.race(executing);}}return Promise.all(result);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词