BUG 的源头, 想以下以下场景:后端的接口定义里将一个字段声明数组, 但实际上有的时候返回null, 前端没有对这个case 进行处理, 导致前端页面崩溃.后端接口定义里, 将一个字段声明为required...> A | E;}在这次修改中, 我们将异常像数据一样由函数返回, 类似于Golang 中的错误处理方式.但直接通过union type进行抽象有一个弊端: 我们将难以分辨解析器返回的数据是属于成功分支的..., 对其包含的value: number进行inc, 其返回结果同样为一个Promise.若Promise处于rejected状态时, 不对其进行任何操作, 而是直接返回一个rejected状态的Promise...中, 这个上下文既是"有可能成功的异步返回值".得力于这种抽象, 我们可以摆脱call back hell和对状态的手动断言(GoLang 的r, err := f()).让我们思考一下, 其实上文中提到的...Promise r, 并将其值设定为空数组: Promise.resolve([])尝试将values数组中的Promise的值一个个通过Promise.then串联concat进Promise r.返回