答应,.then()中的参数未定义,如何传递?

时间:2018-07-05 04:11:32

标签: javascript vue.js ecmascript-6 promise

我正在使用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中做到这一点吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

actions在功能范围之外。您需要手动绑定或使用ES6箭头功能以避免未定义。

答案 1 :(得分:0)

好吧,这是我对问题的思考。

在Vue中,将this传递给外部函数时,Vue不会像React那样将其视为{state, actions}

自变量(在我的情况下为this)的使用方式应与组件内部使用的方式相同。通过this.myMethod()

调用方法

我将参数从{state, actions}-> actions更改为有效。

感谢指针!