new Promise 创建异步对象需传入立即执行的执行器函数,接收 resolve 和 reject 参数;执行器同步运行,resolve/reject 触发微任务,状态不可逆,常用于封装异步操作并配合 then/catch 使用。

用 new Promise 创建异步对象,核心是传入一个执行器函数(executor),它接收两个参数:resolve 和 reject,分别用于标记成功或失败。
基本语法结构
Promise 构造函数必须传入一个函数,该函数立即执行,且不能是箭头函数(需保持 this 绑定):
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
const myPromise = new Promise((resolve, reject) => {
// 异步操作,比如 setTimeout、fetch、readFile 等
if (/* 操作成功 */) {
resolve(成功值); // 触发 then
} else {
reject(错误原因); // 触发 catch
}
});常见使用场景示例
模拟一个 1 秒后返回数据的异步任务:
const delayedFetch = new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.3;
if (success) {
resolve({ data: 'Hello from Promise!' });
} else {
reject(new Error('Network failed'));
}
}, 1000);
});
<p>delayedFetch
.then(result => console.log(result))
.catch(err => console.error(err.message));注意事项和关键细节
- 执行器函数是同步执行的:new Promise 时,executor 立即调用,但 resolve/reject 的回调会进入微任务队列
- Promise 状态不可逆:一旦 resolve 或 reject 被调用,后续再调用无效
- 不要忘记处理 reject:未 catch 的 rejected Promise 会触发全局 unhandledrejection
-
避免嵌套 Promise:如需链式异步,优先用
.then()返回新 Promise,而非在 executor 中再写 new Promise
与 async/await 的关系
async 函数底层返回的就是 Promise 对象。你可以把 new Promise 看作手动构造 Promise 的“底层方式”,而 async/await 是更简洁的语法糖:
// 这样写
async function fetchData() {
return await fetch('/api').then(r => r.json());
}
<p>// 等价于手动 new Promise(不推荐,仅作理解)
function fetchData() {
return new Promise((resolve, reject) => {
fetch('/api')
.then(r => r.json())
.then(data => resolve(data))
.catch(err => reject(err));
});
}

















