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

如何修复编写返回Promise的延迟执行函数时触发的UncaughtAssertionError

错误原因

你的代码存在3个核心问题:

  • setTimeout的返回值是计时器ID(浏览器/Node环境下均为正整数,属于truthy值),不是你传入的回调函数的返回值,所以当前逻辑永远会走resolve分支,返回计时器对象,和需求完全不符
  • 判断逻辑是同步执行的,没有等待延迟结束、回调执行后再处理,Promise会立即敲定状态,完全没有延迟效果
  • reject传递的字符串不符合要求,需求要求传递"Falsy value retrieved",你当前写的是"Falsy value"
修复后代码
const doShortlyExpectingTruthy = function(callback, delay, data) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // 延迟到期后执行回调,拿到真实返回值
      const callbackReturn = callback(data);
      if (callbackReturn) {
        resolve(callbackReturn);
      } else {
        reject("Falsy value retrieved");
      }
    }, delay);
  });
};
逻辑说明

修复后将回调执行、返回值判断的逻辑全部放到setTimeout的执行函数内,等待延迟到期后再执行对应操作,拿到回调的真实返回值后再决定是resolve还是reject,完全匹配需求规则。

内容的提问来源于stack exchange,提问作者ras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:03