我正在使用this指南在Promise中运行某些父函数。那是一个React示例,我正在使用Vue.js。
我的问题是,尽管我完全按照示例构建Promise,但仍然遇到actions undefined
问题。
即参数actions
未在thenable(.then()
)方法内部定义。
我知道.then()
创建了一个新对象,我应该将参数明确传递给该对象。这将产生2个问题:
1)在示例中actions
内如何定义参数.then()
。
是因为Vue和React的差异吗?
2)由于connect()
隐式地解析为user
对象,因此如何将额外的变量(在我的情况下为actions
参数)绑定或添加到resolve方法。
这是我的单例代码:
var chatKitConnectionSingleton = (function () {
var instance;
function init({ state, actions }, uid) {
new ChatManager({
instanceLocator: "##:###:###-###-###-###",
userId: uid,
tokenProvider: new TokenProvider({url: '...' })
})
.connect({
onAddedToRoom: room => {
actions.selectRoomAsCurrent(room)
},
onRemovedFromRoom: room => {
actions.removeRoomLocally(room.id)
},
onRoomDeleted: room => {
actions.removeRoomLocally(room.id)
}
})
.then(user => {
actions.setCurrentUser(user)
Promise.all(
user.rooms.map(room =>
user.subscribeToRoom({
roomId: room.id,
hooks: {
onNewMessage: message => {
actions.newMessageArrived(message)
}
},
messageLimit: 10
})
)
).then(rooms => {
actions.setRoomsFromChatkit(rooms)
}).catch(err =>{
actions.setRoomsFromChatkit([])
})
})
.catch(error => console.log('CHATKIT | Error on connection', error))
};
return {
getInstance: function ({ state, actions },uid) {
if ( !instance ) {
instance = init({ state, actions },uid);
}
return instance;
}
};
})();
EDIT
我刚刚发现actions
参数在连接挂钩中也是未定义的:|
我想真正的问题是,如何将Vue组件methods
传递给单例。
当前,我正在执行此操作,但是解析为actions
未定义。
let chatManagerConnectPromise = chatConnection(this, uid)
含义this
不会像React中那样解析为{state, actions}
。有人知道如何在Vue中做到这一点吗?
非常感谢!
答案 0 :(得分:0)
actions在功能范围之外。您需要手动绑定或使用ES6箭头功能以避免未定义。
答案 1 :(得分:0)
好吧,这是我对问题的思考。
在Vue中,将this
传递给外部函数时,Vue不会像React那样将其视为{state, actions}
。
自变量(在我的情况下为this
)的使用方式应与组件内部使用的方式相同。通过this.myMethod()
我将参数从{state, actions}
-> actions
更改为有效。
感谢指针!