Skip to content
This repository has been archived by the owner on Jan 10, 2018. It is now read-only.

收消息的回调data是undefined #1

Closed
ramsaylee opened this issue Sep 15, 2015 · 11 comments
Closed

收消息的回调data是undefined #1

ramsaylee opened this issue Sep 15, 2015 · 11 comments

Comments

@ramsaylee
Copy link

你好,感谢分享这个模块。
在使用过程中发现几个问题:

  1. angular的模块名按照文档中是“angular-leancloud-realtime”,但这样注入报错找不到,我看了一下你的代码里面是这样的
    angular.module('leancloud-realtime', []).provider('LCRealtimeFactory'...
    我按照“leancloud-realtime”这个模块名注入就可以了,所以不知道是不是笔误?
  2. 我使用convObj.send发送了一个消息,然后收信人那边确实收到了,on('message', function(data))确实进了,但是打印出的data是undefined,不知道是什么原因?

再次感谢分享,希望能够得到回复。

@leeyeh
Copy link
Owner

leeyeh commented Sep 15, 2015

  1. 是,感谢指正。
  2. 已确认是 SDK 的问题。

@ramsaylee
Copy link
Author

@leeyeh 好的,多谢!

@leeyeh leeyeh closed this as completed in c7b40f4 Sep 16, 2015
@leeyeh
Copy link
Owner

leeyeh commented Sep 16, 2015

released v0.1.1

@ramsaylee
Copy link
Author

@leeyeh 你好,你关闭这个issue之后,我就更新了这个包到v0.1.1。但是因为这两天创建对话一直无法使用(直到今天下午在leancloud技术人员的支持下可以正常使用),所以我一直没有再看这个问题。
刚才我试了一下,结果还是跟之前一样,对方可以收到消息,但是收消息的回调里面的data依然是undefined

realtimeInstance.on('message', function(data) {
    // 这里可以正常进入
    console.log(data); // 这里打印出来是undefined
});

麻烦看看是什么问题?多谢!

@leeyeh
Copy link
Owner

leeyeh commented Sep 18, 2015

麻烦请再提供这些信息:

  • 发送的消息是 LCTextMessage 类型的吗?
  • 发消息的相关代码。
  • 发消息时,控制台 network 里那个 websocket 发送的一个 frame,类似这样:
{"cmd":"direct","cid":"55f83c9060b296e5ac422753","msg":"{\"_lctext\":\"55\",\"_lctype\":-1}","i":2033,"r":false,"transient":false,"peerId":"bill"}
  • 收到消息时,控制台 network 里那个 websocket 收到的一个 frame,类似这样:
{"peerId":"ivy","cmd":"direct","cid":"55f83c9060b296e5ac422753","fromPeerId":"bill","msg":"{\"_lctext\":\"55\",\"_lctype\":-1}","timestamp":1442590542931,"id":"Brhvlo3SSCiWjMtWDgrZQA"}

抱歉我这里的 demo 可以正确的拿到消息实例。如果有办法让我复现,比如提供一个在线页面或者可运行的代码,那会方便调试很多。

@ramsaylee
Copy link
Author

  • 是LCTextMessage类型
  • 代码如下
// 发送消息
// convObj是conversation的一个实例
var message = new LCTextMessage('55');
message.cid = convObj.id;
convObj.send(message).then(function(data) {
})
// 另一边收消息
// realtimeInstance是realtime的一个实例
realtimeInstance.on('message', function(data) {
    console.log(data);
});
  • 发消息时的websocket frame
{"cmd":"direct","cid":"55fcf98060b2946038e461c3","msg":"{\"_lctext\":\"55\",\"_lctype\":-1}","i":2019,"r":false,"transient":false,"peerId":"2"}
{"peerId":"2","cmd":"ack","i":2019,"uid":"YxWs2i5cQK+ZtR+o8u_DAA","t":1442642304682}
  • 收消息时的websocket frame
{"peerId":"1","appId":"N253LtB6WlITbrG6HXWrqbPK","cmd":"direct","cid":"55fcf98060b2946038e461c3","fromPeerId":"2","msg":"{\"_lctext\":\"55\",\"_lctype\":-1}","timestamp":1442642304682,"id":"YxWs2i5cQK+ZtR+o8u_DAA"}
{"cmd":"ack","cid":"55fcf98060b2946038e461c3","mid":"YxWs2i5cQK+ZtR+o8u_DAA","peerId":"1"}

然后在上面收消息的回调中打印出的data是undefined,谢谢。

@leeyeh
Copy link
Owner

leeyeh commented Sep 19, 2015

请问,leancloud-realtime sdk 的 version 是多少?

@ramsaylee
Copy link
Author

在代码中用AV.realtime.version打印出是2.2.0
在bower_components中的leancloud-realtime/dist/AV.realtime.js中看到变量version是2.2.0
在bower_components中的leancloud-realtime/bower.json中看到version是2.2.1

@leeyeh
Copy link
Owner

leeyeh commented Sep 20, 2015

从现在的信息看,返回 undefined 说明 https://github.com/leeyeh/angular-leancloud-realtime/blob/master/src/index.js#L15
这一行的 MessagePaerser.parse(message) 没有找到任何 valid MessageType。

除此我没有更多想法了,如果你能给我一个能访问的地址,或者给我代码让我跑起来,我能单步调一下。另一方面,我会在关键逻辑处加一些日志,不过可能需要一些时间。话说你能单步调试一下上面说的这一行,看看为什么 TextMessage.validate(message) 会返回 false 吗?

@ramsaylee
Copy link
Author

@leeyeh 你好,我昨天有空就自己调了一下,发现了问题:
每到angular-leancloud-realtime/dist/index.js的line 571,经过这行代码

var messageCopy = angular.merge({}, message);

之后,messageCopy都会是什么也没有,下面的执行就不用看了。但在这行代码之前的message都是正常的,所以我想跟angular.merge有关系。看了一下文档,貌似这个方法是在angular 1.4之后才有的,我的angular的版本是1.3所以就会有问题,我升级了angular之后就没有问题了。
谢谢你的耐心帮助!

@leeyeh
Copy link
Owner

leeyeh commented Sep 23, 2015

Fixed in 0.1.2 by replace angular.merge with angular.copy.
感谢你的帮助。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants