如何根据needPromise条件实现Promise的两种resolve逻辑?
实现方案
代码实现
直接修改getLayerId方法,增加needPromise为false时的立即resolve分支即可,完整代码如下:
let needPromise = true; function getLayerId(): Promise<string> { return new Promise((resolve, reject) => { if (needPromise) { // 此处替换为你的异步业务逻辑,比如打开弹窗等待用户操作 // 以下为弹窗场景的示例代码 const modal = document.createElement('div'); modal.innerHTML = ` <div>请输入layerId:<input type="text" id="layerInput" /></div> <button id="confirmBtn">确认</button> <button id="cancelBtn">取消</button> `; document.body.appendChild(modal); // 确认按钮逻辑 document.getElementById('confirmBtn')?.addEventListener('click', () => { const inputVal = (document.getElementById('layerInput') as HTMLInputElement).value; document.body.removeChild(modal); resolve(inputVal); }); // 取消按钮逻辑 document.getElementById('cancelBtn')?.addEventListener('click', () => { document.body.removeChild(modal); reject(new Error('用户取消操作')); }); } else { // needPromise为false时直接resolve,可自定义默认返回值 resolve(''); } }); }
调用方式修正
你原来的调用写法存在语法错误,需要先执行getLayerId方法拿到Promise实例再调用then,正确写法如下:
getLayerId() .then((layerId: string) => { // 此处处理拿到layerId后的业务逻辑 console.log('获取到的layerId:', layerId); }) .catch(err => { // 错误处理,比如用户取消弹窗的场景 console.error(err.message); });
注意事项
- 如果需要立即resolve时返回非空默认值,直接修改
resolve('')中的字符串参数即可,比如resolve('default-layer-001') - 异步逻辑中如果有异常场景,直接调用
reject()抛出错误,在catch分支中统一处理即可
内容的提问来源于stack exchange,提问作者user15361861
相关产品推荐
相关产品推荐

