angular - 函数从 pouchDB 获取委托(delegate),插入一些调试数据并返回一个 promise

标签 angular sqlite typescript ionic-framework pouchdb

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

我创建了一个接受委托(delegate)和任何类型的参数的函数。但返回给我一条错误消息:

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)
          });
      }


    });
  }

委托(delegate)DTO:

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

函数的使用:

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

有人可以帮助我吗?

最佳答案

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

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

关于angular - 函数从 pouchDB 获取委托(delegate),插入一些调试数据并返回一个 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101073/

相关文章:

*NgIf 完成后 Angular 4 运行代码

javascript - 在混合应用程序中找不到 AngularJS

ios - 使用XCode构建Sqlite ICU

mysql - 如何使用 Sequelize 将每行 2 列相乘并对所有结果求和?

angular - Protractor 无法找到元素并且脚本超时

typescript - 在 typescript 中解构两种类型的数组时如何保留类型信息?

angular - 类型错误 : Object doesn't support property or method 'map' - AngularJS2

angular - 在 Stackblitz 中导入 CSS 时出现 Mime 类型错误

sqlite - 在没有默认值的情况下向 SQLite 添加非空 DateTime 列?

javascript - 返回多个类型的函数,以逗号分隔。 Typescript 中的内容是什么?