将含async/await的JS代码改写为纯Promise版本并修复time undefined问题
你改写代码的问题点
- 逻辑结构混乱:将原始代码中独立的
f1、f2、f3三个函数的逻辑错误合并到了同一个f1函数中,完全打乱了原有的执行顺序 - 调用无参数:最后执行
f1()时没有传入tempo参数,导致参数为undefined,控制台输出异常 - 拼写错误:代码中出现了拼写错误
Promisse,正确拼写应为Promise - 错误捕获位置错误:原始代码的错误捕获是针对整个异步流程的,你将
catch写在了f1内部,不符合原始逻辑
正确改写版本
(function() { function exibirErro(err) { console.log(err.message); } // 对应原始f1,移除async,直接返回Promise function f1(tempo) { return new Promise((resolve, reject) => { const f = () => reject(new Error('Rejeitado')); console.log(`Aguardando ${tempo} segundos...`); setTimeout(f, tempo); }); } // 对应原始f2,移除async,用Promise封装逻辑 function f2(x) { return new Promise((resolve, reject) => { if ((Math.random() * 10) % 2 == 0) { reject(new Error('Ops')); return; } resolve(1000 * x); }); } // 用Promise链式调用替代所有await逻辑 new Promise(resolve => resolve(2)) .then(r => f2(r)) .then(t => f1(t)) .catch(err => exibirErro(err)); })();
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

