是sdk的回调问题,框架是vue + electron,PC的跨端开发,但是问题实际是Vue的
分为两个文件,一个是vue调用层,一个是js封装层
首先在vue文件(渲染层调用)
<div class="title" @click="leave">离开</div>
...
//script
import agora from "../utils/agora"; //引入js文件
//methods方法
leave(){
agora.leave()
}
//agora.js
var agora = {};
const EventHandles = {
// 监听离开频道事件
onLeaveChannel: ({ channelId, localUid }, stats) => {
console.log('成功退出频道:' + channelId);
},
}
agora.init = function(){
//这里是初始化,在项目刚启动的时候,用registerEventHandler函数注册监听回调,对象就是上面的EventHandles
rtcEngine.registerEventHandler(EventHandles);
}
//离开房间
agora.leave = function () {
//rtcEngine是一个已经加载完成的sdk对象
rtcEngine.leaveChannel();
}
export default agora;
问题:在vue层我调用成功后,不能直接获取到leaveChannel()的结束状态,现在只能等待onLeaveChannel监听函数在控制台打印log告诉我结果,我希望的是在vue层通过
leave(){
agora.leave(res=>{
console.log('回调结果',res)
//继续你想要执行的代码
})
}
这种方式,来实时返回结果,而不是傻兮兮的等着监听函数的回调。遗憾的是sdk的方法并没有直接.then 或者是 .catch 的方式,这让我的vue层无法判断是成功还是失败状态
现在是通过js引入store,储存在state里面,然后vue通过watch监听状态。非常繁琐。有没有什么其他办法?