因此,当一次失败返回该可观察到的错误和服务器响应时,该请求将结束。但是其他所有可观察对象仍然存在,并且随着时间的流逝而变得完整,因为请求已结束,因此从未到达客户端。
我如何取消所有待处理的可观察物?
query combine {
firstQuery { <--- this fail
fieldOne
}
secondQuery { <-- this keep the request alive
secondOne
}
}
更新 在示例中,两个查询都使用Axios Http Client向另一个资源发出Http请求。因此,当其中一个抛出错误时,服务器GraphQL返回错误,但是另一个请求仍然有效,不会被取消或取消订阅。
答案 0 :(得分:0)
这是服务器端问题。 GraphQL支持部分响应,因为您现在正在亲身体验。如果解析字段时抛出错误,则该字段将解析为null,并且该错误将添加到响应内的errors
数组中。
但是,如果发生错误的字段为非空,则错误将使父字段“冒泡”。如果该字段也不为空,则它将冒泡直到其父级,依此类推,直到到达可为空的字段或根为止。
这意味着这样的模式:
type Query {
firstQuery: SomeType
secondQuery: SomeOtherType
}
将允许(firstQuery
或secondQuery
中的任何一个在执行期间抛出,而不会影响另一个。但是我们可以这样做:
type Query {
firstQuery: SomeType!
secondQuery: SomeOtherType!
}
如果任何一个字段抛出,我们都将在响应中null
中得到data
。