我想写一个函数,但我不知道哪一个更好:
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);
}
}
这两个都很好,我不知道哪一个更好,或者它们之间有什么区别。
2条答案
按热度按时间fdbelqdn1#
不,它们并不完全相同,区别如下:
1.使用的
call()
调用返回生成器function*
的迭代器对象,而async
函数将返回 Package 在promise中的数组。1.如果在从生成器调用中获取值后没有向
iterator.next()
调用传递任何值,则从生成器函数返回的结果数组将有四个undefined
值。但是在async
版本中,您将在Promise Package 的数组中获取从api()
调用返回的值。1.同样,
yield
语句也会在迭代器时返回值,但是在async
函数中,await
将等待api()
调用返回的Promise被解析,然后移动到下一个await
,否则如果值不是来自api()
调用的Promise,则将其转换为已解析的Promise,并且await
表达式将成为解析的Promise的值。这三点可以通过下面的片段来说明。
1.发生器功能:
1.异步功能:
bfnvny8b2#
这被称为生成器函数btw。
async/await和generator之间最重要的区别是,生成器是从Node.js 4.x一直支持的,而async/await需要Node.js >= 7.6.0。然而,考虑到Node.js 4.x已经达到生命周期的终点,Node.js 6.x将在2019年4月达到生命周期的终点,这种差异正在迅速变得无关紧要。来源:https://thecodebarbarian.com/the-difference-between-async-await-and-generators
Aysnc/Await提供了一种更简洁的方法来处理并发。但是生成器函数提供了更大的灵活性。
选择取决于你想要实现什么,但在大多数情况下,如果你使用的是现代版本的NodeJs,那么使用async/await是有意义的。