【问题标题】:accessing yield inside arrow function [closed]访问箭头函数内的产量[关闭]
【发布时间】:2015-11-27 07:54:53
【问题描述】:

由于无法创建箭头生成器函数, yield 从未在箭头函数的上下文中使用。

var arrowGenerator = *() => { };

那么您应该能够在生成器函数的上下文中使用 yield。就像这个

function* generator() {
    funcWithCallback((value) => {
       yield value;
    });
}

但在 babel 中,它在箭头函数的上下文中使用 yield 而不是流派。

我想这样做,这样您就不需要返回带有该值的回调函数,只是为了产生它。

function* gen() {
    yield function (callback) {
        funcWithCallback(callback);
    } 
}

【问题讨论】:

  • 问题是什么?
  • 你不能。您只能在生成器函数的主体中直接使用yield
  • 您希望func 使用该功能做什么?您不能跨功能让步。另外,你想在这里做什么?
  • 您的示例可以简化为function* gen() { yield funcWithCallback; } - 即使在其中,您也不是来自回调内部的yield

标签: javascript ecmascript-6 babeljs


【解决方案1】:

yieldyield* 关键字只能在生成器函数中直接使用。您的代码片段在概念上存在缺陷,类似于:

function f1() {
  if(someCondition) {
    f2((value) => {
       else {
         // do something
       }
    });
  }
}

或者,到这个:

function f1() {
  f2((value) => {
    return someValue; // while this is legal, it doesn't cause f1 to return
  });

  codeAfterReturn();
}

显然,这 2 个示例不起作用,您的代码片段也是如此。

【讨论】:

  • 但是当你让步时,你不会返回函数并结束函数的执行,而是暂停它。然后应该是可能的吧?
  • 不,不应该。那是语言/语法的规范。这不是一个观点,我上面的例子证明了你尝试中的错误
  • 好的,谢谢你清理它。 :)
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2020-05-05
  • 1970-01-01
  • 2018-08-16
相关资源
最近更新 更多