Javascript 承诺,参数在.then()中未定义,如何传递?
我正在使用一个指南来运行Promise中的一些父函数。这是一个React示例,我正在使用Vue.js 我的问题是,即使我构建了与示例完全相同的承诺,我仍然会遇到Javascript 承诺,参数在.then()中未定义,如何传递?,javascript,vue.js,ecmascript-6,promise,Javascript,Vue.js,Ecmascript 6,Promise,我正在使用一个指南来运行Promise中的一些父函数。这是一个React示例,我正在使用Vue.js 我的问题是,即使我构建了与示例完全相同的承诺,我仍然会遇到操作未定义的问题 也就是说,参数actions没有在thenable(.then())方法中定义 我知道.then()创建了一个新对象,我应该显式地向该对象传递参数。这就产生了两个问题: 1) 为什么参数actions是在示例中的.then()中定义的。 是因为Vue和React的差异吗 2) 由于connect()隐式解析为user对象
操作未定义的问题
也就是说,参数actions
没有在thenable(.then()
)方法中定义
我知道.then()
创建了一个新对象,我应该显式地向该对象传递参数。这就产生了两个问题:
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;
}
};
})();
编辑
我刚刚发现,actions
参数在连接钩子中也是未定义的:|
我想真正的问题是,如何将Vue组件方法
传递给单例
目前,我正在这样做,但它解决了操作
未定义的问题
let chatManagerConnectPromise = chatConnection(this, uid)
意思是这个
不会像React那样解析为{state,actions}
。有人知道如何在Vue中实现这一点吗
非常感谢 操作不在功能范围内。您需要手动绑定或使用ES6箭头函数来避免未定义。好的,这是我过度思考的问题
let chatManagerConnectPromise = chatConnection(this, uid)
在Vue中,当将此
传递给外部函数时,Vue不会像React那样将其视为{state,actions}
参数(在我的例子中是this
)的使用方式应该与在组件内部使用的方式相同。通过this.myMethod()调用方法
我将参数从{state,actions}
->actions
更改为所有操作都有效
谢谢你的指点 谢谢,但那没用<代码>操作
甚至在返回承诺之前都是未定义的。所有(
以及承诺内部,即使使用建议的编辑。您可以将此函数init({state,actions},uid){->更改为({state,actions},uid)=>{}