javascript - 未处理的 promise 拒绝 : Cannot call method 'push' of null

标签 javascript typescript ionic2

我有一个我似乎无法理解的问题。如果有人可以提供一些建议,我将不胜感激。

我正在使用 Ionic2 和 Meteor/Mongo 构建一个聊天应用程序。

我有以下代码:

  private findChats(): Promise<Mongo.Collection<Chat>> {
    let promise: Promise<Mongo.Collection<Chat>> = new Promise<Mongo.Collection<Chat>>(resolve => {
      let registeredIds: String[] = [this.senderId];
      for (let i = 0; i < this.jobModelsForSender.length; i++) {
        console.log('findChats:  registeredIds.push this.jobModelsForSender[i].id: ' + registeredIds + '  -  ' + this.jobModelsForSender[i].id);
        registeredIds.push('J' + this.jobModelsForSender[i].id);
        console.log('findChats:  pushed: ' + registeredIds);
      }
      this.subscribe('chats', this.senderId, registeredIds, () => {
        console.log('findChats:  in subscribe: ' + this.senderId+'  '+registeredIds);

        let chats: Mongo.Cursor<Chat> = Chats.find(
          { memberIds: { $in: registeredIds } },
          {
            sort: { lastMessageCreatedAt: -1 },
            transform: this.transformChat.bind(this),
            fields: { memberIds: 1, lastMessageCreatedAt: 1 }
          }
        );
        console.log('findChats:  chats: ' + chats);
        this.chats = chats;
        let localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
        chats.forEach((chat: Chat) => {
          localChatCollection.insert(chat);
        });
        console.log('findChats:  resolve(localChatCollection): ' + localChatCollection);
        resolve(localChatCollection);
      });
    });
    return promise;
  }

但我得到以下输出:

findChats:  registeredIds.push this.jobModelsForSender[i].id: P8  -  72 app.bundle.js:118232
findChats:  pushed: P8,J72 app.bundle.js:118234
findChats:  registeredIds.push this.jobModelsForSender[i].id: P8  -  72 app.bundle.js:118232
findChats:  pushed: P8,J72 app.bundle.js:118234
findChats:  registeredIds.push this.jobModelsForSender[i].id: P8  -  72 app.bundle.js:118232
findChats:  pushed: P8,J72 app.bundle.js:118234
Unhandled Promise rejection: Cannot call method 'push' of null ; Zone: <root> ; Task: Promise.then ; Value: TypeError {stack: (...), message: "Cannot call method 'push' of null"} zone.js:461
Error {rejection: TypeError, promise: ZoneAwarePromise, zone: Zone, task: ZoneTask, stack: (...)…}
 zone.js:463
Unhandled Promise rejection: Cannot call method 'push' of null ; Zone: <root> ; Task: Promise.then ; Value: TypeError {stack: (...), message: "Cannot call method 'push' of null"} zone.js:461
Error {rejection: TypeError, promise: ZoneAwarePromise, zone: Zone, task: ZoneTask, stack: (...)…}
 zone.js:463
Unhandled Promise rejection: Cannot call method 'push' of null ; Zone: <root> ; Task: Promise.then ; Value: TypeError {stack: (...), message: "Cannot call method 'push' of null"} zone.js:461
Error {rejection: TypeError, promise: ZoneAwarePromise, zone: Zone, task: ZoneTask, stack: (...)…}
 zone.js:463
findChats:  in subscribe: P8  P8,J72 app.bundle.js:118243
findChats:  chats: [object Object] app.bundle.js:118249
findChats:  resolve(localChatCollection): [object Object] 

如您所见,我在 zone.js 中遇到错误。据我所知,当我调试它时,如日志所示,它成功地将 push 发送到 registeredIds。然后它退出函数,返回 promise。之后它进入记录错误的 zone.js

最佳答案

答案可能与很多人无关,但正如安东指出的那样,这是一个与异步加载 promise 有关的问题。

我有一个事件同时调用同一个 promise 。一旦我删除该事件的触发器,我就不会收到任何错误。

关于javascript - 未处理的 promise 拒绝 : Cannot call method 'push' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890210/

相关文章:

html - 如何使选项卡按钮宽度灵活 - ionic 2

javascript - 如何隐藏选项中的文本 ionic2

javascript - 复选框内的复选框标签或激活哪个按钮?

javascript - 无法从 TypeScript 中的模块/命名空间导出/导入类

javascript - 在 Typescript Vue 项目中使用 Javascript 模块

typescript - 在 Typescript 中使用 npm 模块

cordova - 处理离线优先移动应用程序(PouchDB)的大型数据集的最佳方法

javascript - 如何使用其他协议(protocol)打开路由?

javascript - 将节点添加到 d3js 中现有的集群力布局

javascript - Modbus TCP 到 JavaScript 的转换