如何创建返回Promise的数组求和函数?修复错误并实现async-await改写
修复你的Promise代码并实现async/await版本
你的代码有几个明显的问题,我帮你逐个梳理并修复:
- 拼写错误:Promise构造函数的第一个回调参数你写成了
myRsolve,正确的参数名是myResolve(少了个字母e),这会导致调用时找不到该函数。 - 错误的
.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,提问作者סוהא מסארווה
相关产品推荐
相关产品推荐

