【问题标题】:Unexpected token '*' Expected an opening '(' before a function's parameter list意外的标记 '*' 在函数的参数列表之前需要一个开头的 '('
【发布时间】:2020-01-31 21:19:06
【问题描述】:

iOS9 似乎不喜欢 JavaScript 生成器function*。我目前正在尝试摆脱 iOS 上的承诺问题,我的代码如下所示:

...

    myFunction: function() {
        return this.spawn(function*() {
            yield MyApp.function();
        });
        return;
    },
...

这会在 iOS 9 上导致以下错误:

意外的标记 '*' 期望在函数的前面有一个开头的 '(' 参数列表

您知道兼容的替代方案吗?

【问题讨论】:

    标签: javascript ios generator ecmascript-5


    【解决方案1】:

    iOS 10 支持生成器。如果您被 iOS 9 卡住了,那么您将不得不实现自己的 fake 生成器。生成器协议具有nextreturnthrow[Symbol.iterator] 方法。您只能实施您需要的那些。例如,这是[Symbol.iterator]的一个实现:

    let createGenerator = values => () => ({
      [Symbol.iterator]() {
        let i = 0;
        return {
          next: () => ({
            value: values[i++],
            done: i > values.length
          }),
          // next
          // return
          // throw
        }
      }
    });
    
    let realGenerator = function*() {
      yield 1;
      yield 2;
      yield 3;
      yield 4;
    };
    
    let fakeGenerator = createGenerator([1, 2, 3, 4]);
    
    console.log(...realGenerator());
    console.log(...fakeGenerator());

    【讨论】:

    • 但 iOS 9 的语法似乎真的有问题 function*() 我不确定它是否会起作用:/
    • 因此,我的解决方案 (createGenerator) 避免了 function*()
    • 哈哈,对不起
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多