【问题标题】:function getting a delegate from pouchDB, insert some debug data and return a promise从 pouchDB 获取委托的函数,插入一些调试数据并返回一个承诺
【发布时间】:2019-02-05 15:18:00
【问题描述】:

我假装从 pouchDB 拦截函数并将其发送到日志 API。之后,我会向任何需要使用的部分返回一个承诺。

我创建了一个接受委托和任何类型参数的函数。但是是给我一个错误信息:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property '_closed' of undefined
    TypeError: Cannot read property '_closed' of undefined
        at vendor.js:172457
        at vendor.js:81588
        at vendor.js:172415
        at new t (polyfills.js:3)
        at vendor.js:172402
        at vendor.js:81588
        at main.js:54
        at new t (polyfills.js:3)
        at LogSystemProvider.webpackJsonp.111.LogSystemProvider.interceptAndDebug (main.js:52)
        at DbService.webpackJsonp.43.DbService.bulkDocs (main.js:6141)

功能:

public interceptAndDebug(func: DelegateDTO): Promise<any>;
  public interceptAndDebug(func: DelegateDTO, param: any): Promise<any>;
  public interceptAndDebug(func: DelegateDTO, param?: any): Promise<any> {
    return new Promise((resolve, reject) => {
      if(param){
        func( param )
          .then((res)=>{

            let msg: ValueDebug = {
              nameFunc: func.name,
              param: param,
              sucess: res
            }

            this.CreateLog({
              msg: JSON.stringify(msg),
              isDebugger: true
            });

            resolve(res);
          })
          .catch((err)=>{

            let msg: ValueDebug = {
              nameFunc: func.name,
              param: param,
              error: err
            }

            this.CreateLog({
              msg: JSON.stringify(msg),
              isDebugger: true
            });

            reject(err)
          });
      }else{
        func()
          .then((res)=>{

            let msg: ValueDebug = {
              nameFunc: func.name,
              param: param,
              sucess: res
            }

            this.CreateLog({
              msg: JSON.stringify(msg),
              isDebugger: true
            });

            resolve(res);
          })
          .catch((err)=>{

            let msg: ValueDebug = {
              nameFunc: func.name,
              param: param,
              error: err
            }

            this.CreateLog({
              msg: JSON.stringify(msg),
              isDebugger: true
            });

            reject(err)
          });
      }


    });
  }

委托DTO:

export interface DelegateDTO {
  (any?): Promise<any>;
}

功能使用:

bulkDocs( list: Array<any> ){
    return this._logSystem.interceptAndDebug(this._db.bulkDocs, list);
}

有人可以帮助我吗?

【问题讨论】:

    标签: angular sqlite typescript ionic-framework pouchdb


    【解决方案1】:

    如果bulkDocsthis._db的方法,你可能需要绑定它,这样它就不会丢失this._db的上下文:

    return this._logSystem.interceptAndDebug(this._db.bulkDocs.bind(this._db), list);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2015-04-27
      • 2014-08-31
      相关资源
      最近更新 更多