【问题标题】:ES6 Generator Function vs Promises [duplicate]ES6 生成器函数与 Promises [重复]
【发布时间】:2016-10-14 00:32:33
【问题描述】:

如果这个问题太模糊,请告诉我,但是使用 ES6 生成器函数与 Promise 相比有什么优势?我目前看不到优势,希望有人能对此有所了解。

例如,以异步方式检索数据时:

/* Using promises */
fetch('api-endpoint')
   .then( resp => response.json() )
   .then( name => obj.name)
   .then( x => console.log('Name: ', name) )

//VS

/* As a generator function and assuming we have required node-fetch */
run(function *() {
   const url = 'api-endpoint';
   const resp = yield fetch(url);
   const obj = yield response.json();
   const name = yield obj.name;
   console.log("Name available here: ", name); 
}

function run(genFunc) {
   const iterator = genFunc();
   const iteration = iterator.next();
   const promise = iteration.value();
   promise.then( x => {
      const additionalIterator = iterator.next(x);
      const additionalPromise = iterator.value;
      additionalPromise.then( y => iterator.next(y));
   });
}

【问题讨论】:

  • 它很模糊。你能展示一下你会如何使用它们来做类似的事情吗?
  • 没问题,加个例子。

标签: javascript ecmascript-6 es6-promise


【解决方案1】:

Promises 处理异步事件,而生成器提供了一个强大的工具来编写循环和算法来保持自己的状态。

来自MDN Iterator and generators page

处理集合中的每一项是很常见的 手术。 JavaScript 提供了多种迭代 集合,从简单的 for 循环到 map() 和 filter()。迭代器和 生成器将迭代的概念直接带入核心 语言并提供定制行为的机制 for...of 循环。

所以我认为它们旨在解决两个截然不同的问题。

话虽如此,you could use generators instead of promises,就像在你的例子中一样,但我认为这不是他们的本意。

【讨论】:

  • 没问题,这是一个有用的评论,所以我赞成。我只是从处理异步事件的角度来看待它们,但在处理循环阻塞等时它们似乎更实用。只是想把我的头绕在它们周围。
  • 当然,我自己远不是这方面的专家。如果对您有帮助,您可以继续接受它;)@DanWeber
猜你喜欢
  • 2016-02-01
  • 2016-09-24
  • 2016-06-15
  • 2015-01-19
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 2020-08-08
  • 2016-04-30
相关资源
最近更新 更多