You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:30:02