MobX-State-Tree 流程中的类型化 Yield 表达式

2024-04-17

在 MobX-state-tree (MST) 中执行异步操作的推荐方法是使用flow https://mobx-state-tree.js.org/concepts/async-actions,它接受一个生成器函数作为第一个参数,其中每个承诺都应该被产生。

yield表达式具有类型any在打字稿中 https://github.com/Microsoft/TypeScript/issues/2983#issuecomment-230414026,但是有没有办法在MST中自动输入yield表达式呢?

Example

import { flow, types } from "mobx-state-tree";

type Stuff = { id: string; name: string };

function fetchStuff(): Promise<Stuff[]> {
  return new Promise((resolve) => {
    resolve([
      { id: "1", name: "foo" },
      { id: "2", name: "bar" }
    ]);
  });
}

const Thing = types.model({
  id: types.identifier,
  name: types.string
});

const ThingStore = types
  .model({
    things: types.array(Thing)
  })
  .actions((self) => ({
    fetchThings: flow(function* () {
      // "stuff" is of type "any"!
      const stuff = yield fetchStuff();
      self.things.replace(stuff);
    })
  }));

到发电机 https://mobx-state-tree.js.org/API/#togenerator可用于将 Promise 转换为生成该 Promise 的生成器。这与yield*代替yield(可通过设置downlevelIteration to true在 TypeScript 编译器选项中 https://www.typescriptlang.org/docs/handbook/compiler-options.html#compiler-options) 使得 Promise 返回类型得以保留。

import { flow, types, toGenerator } from "mobx-state-tree";

type Stuff = { id: string; name: string };

function fetchStuff(): Promise<Stuff[]> {
  return new Promise((resolve) => {
    resolve([
      { id: "1", name: "foo" },
      { id: "2", name: "bar" }
    ]);
  });
}

const Thing = types.model({
  id: types.identifier,
  name: types.string
});

const ThingStore = types
  .model({
    things: types.array(Thing)
  })
  .actions((self) => ({
    fetchThings: flow(function* () {
      // "stuff" is now of type "Stuff[]"!
      const stuff = yield* toGenerator(fetchStuff());
      self.things.replace(stuff);
    })
  }));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MobX-State-Tree 流程中的类型化 Yield 表达式 的相关文章

随机推荐

  • macOS 上的 Bash - 获取给定年份每个星期六的日期列表

    In bash on macOS 我想写一个小脚本dates 或任何其他可以做的程序 它给我一个格式的日期列表yyyymmdd给定年份的每个星期六并将其保存到变量中 例如 如果我想要 1850 年所有星期六的日期列表 它应该看起来像这样 v
  • 通过 REST API 将对象添加到 Firebase 时如何设置我们自己的 Key

    我使用以下方法将对象添加到 Firebase 数据库 url https myfb firebaseio com api types ty packs json ch curl init curl setopt ch CURLOPT URL
  • 懒惰的 juxt 函数有什么优点吗?

    在回答中一个问题 https stackoverflow com questions 10044254 is there a reverse map function关于一个使用相同参数映射多个函数的函数 A juxt 我想出了一个基本上采
  • 在 C++ 中处理字符串时如何使用 memset? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有Python背景 最近在学习C 我正在学习一个名为的 C C 函数memset并遵循网站上的在线示例https www gee
  • 将对象的 ArrayList 传递给新的 Activity

    我有一个对象的 ArrayList IEArrayList
  • 即使没有任何更改,“转换为最新的 Swift 语法”也会破坏构建

    我的项目是用 Objective C 编写的 只有一个 swift 中的 tableviewcontroller 我今天下载了 Xcode beta 它提示我 转换为最新的 Swift 语法 当我按照步骤操作后 它显示没有任何变化 我也没有
  • Android-从前置摄像头拍照会旋转照片

    我正在 Android 中创建一个应用程序 用户只能在纵向模式下从前置摄像头拍照 我已经将相机视图固定为纵向 但拍照时它看起来是旋转的 最糟糕的是 不同手机的旋转方向不同 在一部手机中向右旋转 而在另一部手机中则向左旋转 这是我的代码片段
  • 在 Maven 中使用 maven-surefire-plugin 传递系统变量

    我想为 Maven 构建传递一些系统变量 如果我使用mvn clean install Dfirst variable value Dsecond variable second value一切安好 但这个配置在pom xml不起作用
  • 安排行动断言替代方案

    一般问题是单元测试是否有 AAA 的替代模式 如果是的话 看到一些例子并了解它们的优点和缺点将会非常有趣 作为 AAA 测试的最简单示例 在 C 中 为了简单起见 使用 var Arranging var annualSalary 1200
  • ListViewItem 覆盖默认样式中断网格视图

    我想知道是否有人遇到过这种情况 基本上我想做的是覆盖默认的列表视图项以自定义所选的背景 前景 我一切顺利 问题是 我注意到在我实现了网格视图的列表视图上 列被破坏了 我不确定会发生什么来打破这个 我覆盖默认样式的方法是使用混合通过编辑模板副
  • 使用 Formik 反应验证最大范围

    我正在尝试使用 React 和 Formik 进行验证 我想要实现最大数字仅为 2 最大范围应仅为 12 expiryMonth yup string required Select month max 2 Invalid month fo
  • ggplot2 facet_wrap 在每个方面绘制点、段、文本

    这与已发布的问题相同here https stackoverflow com questions 11889625 annotating text on individual facet in ggplot2 and here https
  • 调用always_inline‘_mm_mullo_epi32’时内联失败:目标特定选项不匹配

    我正在尝试使用 cmake 编译 C 程序 该程序使用 SIMD 内在函数 当我尝试编译它时 出现两个错误 usr lib gcc x86 64 linux gnu 5 include smmintrin h 326 1 错误 调用alwa
  • userprincipal.findbyidentity 发生操作错误

    好吧 我有责任将具有多个应用程序的网站迁移到另一台服务器 迁移进展顺利 所有应用程序都正常运行 然而 该新服务器的性能低于标准 完全是另一回事 我们决定再次迁移它 这次一切都运行良好 除了一个应用程序 它在第一台和第二台 IIS 服务器上运
  • Protractor 中的全局 beforeEach 和 afterEach

    在每个规范中我都有beforeEach and afterEach声明 是否可以以某种方式全局添加它以避免规范之间的代码重复 目的beforeEach and afterEach 函数是添加一个重复代码块 每次开始或完成执行每个规范时都需要
  • HTML5 Canvas:绘制完成时获取事件

    我正在将图像绘制到画布元素 然后我就有了依赖于这个过程来完成的代码 我的代码如下所示 var myContext myCanvasElement getContext 2d myImg new Image myImg onload func
  • 什么是位掩码?

    我对 C 编程相当陌生 并且遇到了位掩码 位掩码的一般概念和作用是什么 非常感谢例子 掩码定义要保留哪些位以及要清除哪些位 屏蔽是将屏蔽应用于值的行为 这是通过执行以下操作来完成的 按位与运算以提取值中的位子集 按位或运算以设置值中的位子集
  • 大数据请求体为空

    我在 post 方法的正文中发送大量文本 我使用 Postman 来测试这一点 但是它工作正常 我可以像这样读取请求正文 String text request body asText 但是当我尝试在正文中发送大量数据时 我得到的文本为空
  • Websphere 7集群部署

    我们有一个 J2EE 应用程序作为 EAR 文件 部署在 WAS 7 中 为了使应用程序可用性尽可能高 需要部署在 3 个集群中 我们有一个 Quartz Scheduler 类 其工作是每天凌晨 2 00 将数据从一个数据库上传到另一个数
  • MobX-State-Tree 流程中的类型化 Yield 表达式

    在 MobX state tree MST 中执行异步操作的推荐方法是使用flow https mobx state tree js org concepts async actions 它接受一个生成器函数作为第一个参数 其中每个承诺都应