apollo“订阅字段必须返回异步可迭代。已接收:未定义”

reactjs

1个回答

写回答

18762871693

2025-07-05 06:20

+ 关注

Java
Java

使用Apollo时,如果在订阅字段中返回的结果不是异步可迭代对象,将会出现错误信息"订阅字段必须返回异步可迭代。已接收:未定义"。这个错误信息意味着在Apollo的订阅函数中,需要返回一个异步可迭代对象,而不是其他类型的对象。

案例代码:

假设我们有一个基于Apollo的GraphQL API,其中包含一个订阅字段messageStream,用于获取消息的实时更新。让我们来看看如何避免出现"订阅字段必须返回异步可迭代。已接收:未定义"错误。

Javascript

const { ApolloServer, PubSub } = require('apollo-server');

const pubsub = new PubSub();

const typeDefs = <code>

type Query {

hello: String

}

type Subscription {

messageStream: String

}

</code>;

const resolvers = {

Query: {

hello: () => 'Hello world!',

},

Subscription: {

messageStream: {

subscribe: () => {

// 在这个例子中,我们假设有一个消息流,可以使用pubsub模块进行实时更新

return pubsub.asyncIterator('MESSAGE_STREAM');

},

},

},

};

const server = new ApolloServer({

typeDefs,

resolvers,

});

server.listen().then(({ url }) => {

console.log(<code>Server ready at ${url}</code>);

});

在上面的代码中,我们定义了一个基本的GraphQL API,并在其中定义了一个订阅字段messageStream。在订阅字段的subscribe方法中,我们返回了一个异步可迭代对象pubsub.asyncIterator('MESSAGE_STREAM'),这个对象可以用于实时获取消息的更新。

解决"订阅字段必须返回异步可迭代。已接收:未定义"错误

要解决这个错误,我们需要确保在订阅字段中返回的结果是一个异步可迭代对象。在上面的案例代码中,我们使用了pubsub.asyncIterator方法来创建一个异步可迭代对象,以便实时获取消息的更新。

在实际应用中,你可以根据自己的需要来定义一个异步可迭代对象,以返回实时更新的数据。这可以是一个基于数据库的查询结果,或者是一个通过WebSocket实时传输的数据流。

如何处理返回结果不是异步可迭代对象的情况

如果在订阅字段中返回的结果不是异步可迭代对象,Apollo将会抛出一个错误,提示返回的结果必须是异步可迭代对象。在调试时,你可以检查订阅字段的返回值,确保返回的结果是一个异步可迭代对象。

在我们的案例代码中,如果我们在subscribe方法中返回一个普通的对象而不是异步可迭代对象,Apollo就会抛出"订阅字段必须返回异步可迭代。已接收:未定义"错误。

,当使用Apollo时,一定要确保在订阅字段中返回的结果是一个异步可迭代对象。这样可以确保实时订阅功能的正常运行,并避免出现"订阅字段必须返回异步可迭代。已接收:未定义"错误。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号