【发布时间】:2020-01-10 09:05:02
【问题描述】:
我想写一个函数,但不知道哪个更好:
function* call() {
try {
const a = yield api(1);
const b = yield api(2);
const c = yield api(3);
const d = yield api(4);
return [a, b, c, d];
} catch (e) {
console.log(e);
}
}
或异步/等待:
async function call() {
try {
const a = await api(1);
const b = await api(2);
const c = await api(3);
const d = await api(4);
return [a, b, c, d];
} catch (e) {
console.log(e);
}
}
两个都很好用,不知道哪一个更好,也不知道有什么区别。
【问题讨论】:
-
thecodebarbarian.com/… 当你可以使用
await时使用yield似乎很奇怪,我认为。如果api只返回 Promises,你代码的读者会想知道生成器的目的是什么 -
他们返回的不是不同的东西吗?我认为生成器只会在第一次调用时返回部分结果。
-
它是如何工作的?
-
@D_N 生成器可用于实现 async/await(例如,如果 async/await 不可用,如 2015 年),如果您使用蹦床调用函数(例如通过
co模块)。然而,由于我们现在有 async/await,我认为它是一种反模式(虽然在 2015 年还可以,但我更喜欢回调而不是生成器——这是我从未使用过 Koa 框架的原因之一)
标签: javascript ecmascript-6 async-await generator