Apollo:订阅与查询解析器之间的区别?
Apollo: Difference Between Subscription vs Query Resolvers?
此解析器工作正常:
const resolvers = {
Query: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
},
Subscription: {
//[.....]
},
}
};
对订阅解析器使用与查询解析器完全相同的代码是否有意义?即:
const resolvers = {
Query: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
},
Subscription: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
}
};
如果不是,需要什么区别?在此先感谢大家提供任何信息。
是的,如果您希望在订阅结果中收到与在查询结果中收到的相同的数据,那么采用相同的逻辑是有意义的。在这种情况下,分享实际的实现可能是有意义的:
// Used in both query and subscription field
function instant_message(root, args) {
return connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
}
const resolvers = {
Query: {
instant_message,
},
Subscription: {
instant_message,
},
};
查询和订阅之间的最大区别是订阅可能会从发布-订阅消息中接收到额外的信息。例如,在 GitHunt 示例中,我们有一个 commentAdded
订阅解析器,它使用来自 pub-sub 负载的数据并且根本不访问数据库:https://github.com/apollostack/GitHunt-API/blob/cc67a4506c31310b4ba8d811dda11d258c7d60d6/api/schema.js#L166-L171
此解析器工作正常:
const resolvers = {
Query: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
},
Subscription: {
//[.....]
},
}
};
对订阅解析器使用与查询解析器完全相同的代码是否有意义?即:
const resolvers = {
Query: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
},
Subscription: {
instant_message(_, args) {
var ret = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
return ret;
}
}
};
如果不是,需要什么区别?在此先感谢大家提供任何信息。
是的,如果您希望在订阅结果中收到与在查询结果中收到的相同的数据,那么采用相同的逻辑是有意义的。在这种情况下,分享实际的实现可能是有意义的:
// Used in both query and subscription field
function instant_message(root, args) {
return connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues));
}
const resolvers = {
Query: {
instant_message,
},
Subscription: {
instant_message,
},
};
查询和订阅之间的最大区别是订阅可能会从发布-订阅消息中接收到额外的信息。例如,在 GitHunt 示例中,我们有一个 commentAdded
订阅解析器,它使用来自 pub-sub 负载的数据并且根本不访问数据库:https://github.com/apollostack/GitHunt-API/blob/cc67a4506c31310b4ba8d811dda11d258c7d60d6/api/schema.js#L166-L171