修改返回数据,然后在打字稿/离子中返回承诺

Posted

技术标签:

【中文标题】修改返回数据,然后在打字稿/离子中返回承诺【英文标题】:Modify return data then returning promise in typescript / ionic 【发布时间】:2018-12-06 17:09:20 【问题描述】:

我有一个非常简单的问题,但我自己无法得到答案。 在我的 ionic 应用程序中,我正在从数据库中获取数据。我想要 修改来自我的数据

sqlite.execute(): Promise<Article[]>

然后返回promise,以便视图组件中的函数只需通过以下方式显示数据:

this.controllercomponent.getSearchResults( SearchTerm ).then( Res => this.Articles = Res );

现在我用嵌套的 promise 解决了这个问题,但是 ionic 返回一个错误:

return new Promise<Article[]>( Resolve => 
    
    this.dbGetSearchResults( SearchTerm ).then( Res => 
       
      //Modify articles array

      Resolve(Res);
      )
    .catch( Err =>  this.showAlert( "Error fetching db data:", JSON.stringify(Err)); );
    );

错误:


"originalErr": ,
"__zone_symbol__currentTask": 
  "type": "microTask",
  "state": "notScheduled",
  "source": "Promise.then",
  "zone": "<root>",
  "cancelFn": null,
  "runCount": 0

【问题讨论】:

为什么需要把它包裹在new Promise中? 一个承诺就够了吗?只是跳过视图组件中的then 和控制器组件中的return Res;?我可以在“dbGetSearchResults”的then 回调中返回结果吗? 【参考方案1】:

如果不需要,最好避免使用Promise 构造函数。

function f() 
    return Promise.resolve()
        .then(()=>this.dbGetSearchResults( SearchTerm ))
        .then((Res)=>
            /*Modify articles array*/
            return Res;
        )
        .catch( Err =>  this.showAlert( "Error fetching db data:", JSON.stringify(Err)); );

【讨论】:

以上是关于修改返回数据,然后在打字稿/离子中返回承诺的主要内容,如果未能解决你的问题,请参考以下文章

打字稿通用承诺返回类型

打字稿接口和承诺返回一个对象/构造函数?

如何监视调用另一个返回承诺的服务的服务函数 - 打字稿

打字稿承诺泛型类型

有没有办法从猫鼬返回数据?打字稿,NestJS

在打字稿中返回反应 16 个数组元素