【发布时间】:2021-12-05 23:09:02
【问题描述】:
我正在尝试将此代码转换为没有“async - await”的版本。代码转换为使用(所有)承诺,没有异步和等待。但是我的控制台打印未定义时间。有人能帮我吗?它是我大学的作业。 非常感谢
(async() => {
function exibirErro(err) {
console.log(err.message);
}
const f1 = async(tempo) => {
return new Promise((resolve, reject) => {
const f = () => reject(new Error('Rejeitado'));
console.log(`Aguardando ${tempo} segundos...`);
setTimeout(f, tempo);
});
};
const f2 = async(x) => {
if ((Math.random() * 10) % 2 == 0) {
throw new Error('Ops');
}
return Promise.resolve(1000 * x);
};
const f3 = async() => {
const r = await new Promise(resolve => resolve(2));
const t = await f2(r);
await f1(t);
};
try {
await f3();
} catch (err) {
exibirErro(err);
}
})();
我的代码:
function exibirErro(err) {
console.log(err.message);
}
function f1(tempo) {
return new Promise((resolve, reject) => {
const f = () => reject(new Error('Reject'));
console.log(`wait ${tempo} seconds...`);
setTimeout(f, tempo);
})
.then((x) => {
if ((Math.random() * 10) % 2 == 0) {
throw new Error('Ops');
}
return Promise.resolve(1000 * x);
})
.then((t) => {
return Promisse.resolve(f1(t));
}).catch((e) => {
exibirErro(e);
})
}
f1();
【问题讨论】:
-
你为什么要在
async函数中返回一个承诺?它会自动返回一个 Promise,所以你在 Promise 中返回一个 Promise。 -
Math.random() * 10) % 2 == 0测试 [0,10] 范围内的随机浮点数是否是精确整数,甚至也是。这发生的概率如此之低,以至于我不认为它会在数千次或更多测试中发生。
标签: javascript async-await promise