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

如何创建返回Promise的数组求和函数?修复错误并实现async-await改写

修复你的Promise代码并实现async/await版本

你的代码有几个明显的问题,我帮你逐个梳理并修复:

  1. 拼写错误:Promise构造函数的第一个回调参数你写成了myRsolve,正确的参数名是myResolve(少了个字母e),这会导致调用时找不到该函数。
  2. 错误的.then()调用位置:你把.then()放在了Promise构造函数的内部,这不仅会因为变量prom还未完成初始化就被引用而报错,也不符合Promise的使用规范——.then()应该在Promise实例创建完成后再链式调用。

修复后的Promise版本

const array = [4, 2, 7, 1];
// 创建Promise实例
const prom = new Promise((myResolve) => {
  const sum = array.reduce((x, y) => x + y);
  setTimeout(() => {
    myResolve(sum); // 修正拼写错误
  }, 3000);
});

// 在实例外部绑定回调
prom.then((value) => {
  document.getElementById("tot").innerHTML = value;
});

这里我把var换成了const(更符合现代JS规范,避免变量意外修改),同时修正了拼写和.then()的位置。


使用async/await实现的版本

async/await是Promise的语法糖,能让异步代码更易读。实现方式如下:

const array = [4, 2, 7, 1];

// 定义返回Promise的函数,负责计算和并延迟返回
function getArraySum() {
  return new Promise((resolve) => {
    const sum = array.reduce((acc, curr) => acc + curr, 0); // 加上初始值0更严谨
    setTimeout(() => {
      resolve(sum);
    }, 3000);
  });
}

// 用async函数处理异步逻辑
async function displayTotal() {
  try {
    const total = await getArraySum();
    document.getElementById("tot").innerHTML = total;
  } catch (err) {
    // 可以在这里处理错误(虽然这个场景里几乎不会出错)
    console.error(err);
  }
}

// 执行函数
displayTotal();

这里我给reduce加上了初始值0(避免空数组报错,虽然你的数组非空,但这是更严谨的写法),同时用try/catch包裹await逻辑,方便处理可能的异常。

内容的提问来源于stack exchange,提问作者סוהא מסארווה

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:22