微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Graphql apollo 服务器订阅不会推送异步突变,但它可以同步突变

如何解决Graphql apollo 服务器订阅不会推送异步突变,但它可以同步突变

当我在异步突变结果中推送新消息时

data: null

但我可以在没有问题的情况下推送同步突变。 我想你使用异步突变 baceuse 我想递归地访问数据

异步突变 (它在这里不起作用,实际上有效但不推送任何数据)

createNewMessage: async (parent,args,context,info) => {
        try {
            var newMessage = new Message({
                ...args.messageInput,isSent: false,isReceived: false,isReaden: false,});
            await newMessage.save();
            const messages = await Message.find({ toRoomId: args.messageInput.toRoomId  });
            let room = await Room.findById( args.messageInput.toRoomId);
            room.roomMessages.push(newMessage);
            room.unReadMessagesCount = room.unReadMessagesCount+1;
            // rooms for subcription
            const rooms = await Room.find({
                'roomParticipants':{ $in:[
                    mongoose.Types.ObjectId(args.messageInput.author)
                ]}
            }).sort('-createdAt');
             pubSub.publish(LAST_ROOMS_MESSAGE_CHANNEL,{lastRoomMessages:transformRooms(rooms),toUserIds: room.roomParticipants})
            return transformSingleMessage(newMessage);
        } catch (err) {
            throw err;
        }

Than-catch 突变 (它有效,但我不想使用导管)

   createNewMessage: (parent,info) =>{
        const newMessage =  new Message({
            ...args.messageInput,});
        return newMessage.save()
        .then(message=>{
            const room = Room.findById( message.toRoomId);
            return room
        })
        .then(room=>{
            room.roomMessages.push(newMessage);
            return room
                .save()
                .then(room=>{
                    const rooms = Room.find({
                        'roomParticipants':{ $in:[
                            mongoose.Types.ObjectId(newMessage.author)
                        ]}
                            })
                    return rooms
                        .then((rooms)=>{
                            pubSub.publish(LAST_ROOMS_MESSAGE_CHANNEL,toUserIds: room.roomParticipants})
                            return newMessage
                        })
                })
        })
        .catch(err=>{
            throw err;
        })
        
    },

我该如何解决这个问题。有人帮我好吗?谢谢...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。