Promise 核心:resolve 和 reject 完全指南(附实战示例)
🔍 引言
在 JavaScript 中,Promise
是处理异步操作的强大工具,而 resolve
和 reject
是它的核心方法。它们决定了 Promise 的成功或失败状态,让异步代码更易读、更易维护。
本文将带你深入理解 resolve
和 reject
的用法,并通过 3 个实战示例 让你彻底掌握!
📚 1. resolve 和 reject 是什么?
Promise 构造函数接收一个 执行器函数(executor),该函数有两个参数:
resolve(value)
:表示操作成功,将 Promise 状态改为 fulfilled(已完成),并返回结果value
。reject(reason)
:表示操作失败,将 Promise 状态改为 rejected(已拒绝),并返回错误信息reason
。
基本结构
const myPromise = new Promise((resolve, reject) => {
if (/* 操作成功 */) {
resolve("成功的数据");
} else {
reject("失败的原因");
}
});
🚀 2. 如何使用 resolve 和 reject?
✅ 示例 1:模拟异步请求
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.5; // 模拟50%成功率
if (success) {
resolve("数据获取成功!");
} else {
reject(new Error("网络请求失败!"));
}
}, 1000);
});
}
// 调用方式(then/catch)
fetchData()
.then(data => console.log(data))
.catch(error => console.error(error));
// 或使用 async/await
(async () => {
try {
const data = await fetchData();
console.log(data);
} catch (error) {
console.error(error);
}
})();
✅ 示例 2:封装 HTTP 请求(如 Axios)
function getQiniuToken() {
return new Promise((resolve, reject) => {
axios.get('/help/token/qiniu')
.then(res => resolve(res.data)) // 成功时调用 resolve
.catch(err => reject(err)); // 失败时调用 reject
});
}
// 使用方式
getQiniuToken()
.then(token => console.log("Token:", token))
.catch(err => console.error("获取 Token 失败:", err));
✅ 示例 3:文件上传(结合 uni.uploadFile)
function uploadToQiniu(filePath, token) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'https://upload.qiniup.com',
filePath,
name: 'file',
formData: { token },
success: (res) => resolve(JSON.parse(res.data)),
fail: (err) => reject(err)
});
});
}
// 调用方式
uploadToQiniu('path/to/image.png', 'your-token')
.then(res => console.log("上传成功:", res))
.catch(err => console.error("上传失败:", err));
💡 3. 为什么用 resolve/reject 而不是直接 return?
- 异步操作无法直接 return(如
setTimeout
、fetch
、axios
)。 - 统一错误处理,可以用
.catch()
捕获所有错误。 - 支持链式调用(
.then().then().catch()
)。 - 兼容 async/await,让代码更同步化。
🎯 4. 最佳实践
✔ resolve
传有效数据,如 resolve(data)
。
✔ reject
传 Error 对象,如 reject(new Error("失败原因"))
。
✔ 避免嵌套 Promise,尽量用 return
+ .then()
链式调用。
✔ 始终处理错误,用 .catch()
或 try/catch
防止未捕获的异常。
📌 结论
resolve
和 reject
是 Promise 的核心,掌握它们能让你的异步代码更清晰、更健壮。本文通过 3 个实战示例 带你彻底理解它们的用法,现在你可以在项目里灵活运用了!
💬 你有关于 Promise 的问题吗?欢迎在评论区交流! 🚀
🔗 相关推荐
📢 关注我,获取更多前端技术干货! 🎉