javascript - 如何将 "await"用于生成器函数是 ES6?

标签 javascript reactjs react-native es6-promise ecmascript-2017

问题

我很好奇是否可以在现代 ES2017 中的 async/await 上下文中使用 generator 函数。 (该应用程序是一个 React-native-application)

这是我要调用生成器函数的代码:

class ProductViewComponent extends Component {

  async componentDidMount() {
    const result = await loadProduct(...)
    console.log(result)  // Gives: *Generator* and not the final result
  }

}

函数loadProduct()是从另一个文件导入的,定义如下:

export function * loadProduct(id) {

   let product = yield select(productByIdSelector(id));
   if(!product) {
      // ... yield this
      // ... yield that
      // ... finally:
      product = yield call(loadProductFromWeb, id) 
   }
   return product;
}  

具体问题:

据我所知,我可以使用 await 来等待 Promises 的结果。我如何在这种情况下使用生成器函数?

最佳答案

从外观上看,它是一个产生(一些) promise 的协程。假设真正的结果只是协程的最后一个结果,并且您不能更改生成器代码,您可以迭代生成器并等待一切 - Promises 将被等待,undefined 将被忽略。

async componentDidMount() {
  const resultGenerator = loadProduct(...);

  let result;

  for (let task of resultGenerator) {
    result = await task ;
  }

  console.log(result); // should be last result of coroutine
}

关于javascript - 如何将 "await"用于生成器函数是 ES6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44613830/

相关文章:

reactjs - React Native - 库更新后我应该重新链接吗?

javascript - 如何从一个对象数组获取值到另一个对象数组

javascript - 是否应该引用 Javascript 对象键?

reactjs - Material ui中导航栏链接中的子菜单

javascript - ReactJS 使用 getElementById 与库集成

javascript - 如何为商店中的 React Native App 编辑我的 Firebase 规则,以便在未经身份验证的情况下发送数据?

javascript - 如何使用 Javascript 将相应的图像插入到色样中?

javascript - 这个指数分布采样器在密码学上是安全的吗?

javascript - 在哪里存储状态以使 React 组件更可重用

react-native - 如何在 React Native 中获取 Native 元素的尺寸和位置