Angular 2从箭头函数返回数据

时间:2016-11-15 11:37:36

标签: angular asynchronous typescript rxjs

我有以下代码

getEnquiryWithId(id: number) {
    let enquiryStore = this.db.transaction('enquiries', 'readonly').objectStore('enquiries');
    let index = enquiryStore.index('enquiries');
    let request = index.get(id);
    return request.onsuccess = (event) => {
      return event.target.result;
    }
  }

我试图在管道中使用

transform(value: number): string {
    let request = this.dbStore.getEnquiryWithId(value);
    let result = request();
  }

我收到错误Cannot invoke an expression whose type lacks a call signature

  

注意:我不能在这里依赖RxJs主题,因为我的转换函数需要返回一些东西,因为它是一个管道。我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

标题误导。您不希望从箭头函数返回数据(这很简单),但是您希望同步执行箭头函数 - 这是不可能的,因为它是一个将被调用的回调函数。 JS引擎。

正如其他人所说,你可以在你的函数中返回一个Promise,它在内部查询成功后立即解析:

getEnquiryWithId(id: number) {
  let enquiryStore = this.db.transaction('enquiries', 'readonly').objectStore('enquiries');
  let index = enquiryStore.index('enquiries');
  let request = index.get(id);
  return new Promise((resolve, reject) => {
    request.onsuccess = (event) => {
      resolve(event.target.result);
    };
    request.onerror = (event) => {
      reject(request.errorCode);
    };
  }
}

如果要显示承诺的结果,只需使用AsyncPipe即可。没有必要编写自己的转换函数。