首页 > 解决方案 > 意外的标记 '*' 在函数的参数列表之前需要一个开头的 '('

问题描述

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

...

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

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

意外的标记 '*' 在函数的参数列表之前需要一个开头的 '('

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

标签: javascriptiosgeneratorecmascript-5

解决方案


iOS 10 支持生成器。如果您被 iOS 9 卡住,那么您将不得不实现自己的生成器。生成器协议具有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());


推荐阅读