Я использую это руководство для запуска некоторых родительских функций внутри Обещания. Это пример React, я использую Vue.js.
Моя проблема в том, что, хотя я строю Обещание точно так же, как в примере, я все еще сталкиваюсь с проблемой actions undefined
.
А именно, аргумент actions
не определен внутри метода (.then()
), который может быть указан.
Я понимаю, что .then()
создает новый объект, и я должен явно передать аргументы этому объекту. Это создает 2 вопроса:
1) Почему аргумент actions
определен внутри .then()
в примере.
Это из-за различий между Vue и React?
2) Поскольку connect()
неявно разрешает объект user
, как мне связать или добавить дополнительную переменную (в моем случае аргумент actions
) к методу разрешения.
Вот мой синглтон-код:
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
undefined.
let chatManagerConnectPromise = chatConnection(this, uid)
Значение this
не разрешится до {state, actions}
, как в React. Кто-нибудь знает, как это сделать в Vue?
Очень ценится!