如何声明返回任何对象的数组的Promise

时间:2018-03-30 16:38:14

标签: typescript promise

我尝试从返回对象数组的Promise的方法定义返回:

public readAll( ) : Promise<any[]> {

  this.handler.getObject( {
    Bucket              : this.bucket,
    Key                 : this.tableName + '.json',
    ResponseContentType : 'text/plain'
  } )
  .promise( )
  .then( file => { 

    const data : any[] = this._parseData( file.Body.toString( ) ); 

    return new Promise( ( resolve ) => data );
  } )
  .catch( error => {

    return this.writeAll( );
  } );
}

然而,我正面临错误&#34; [ts]一个声明类型既不是&#39;无效的函数。也没有任何&#39;必须返回一个值。&#34;

我做错了什么?

2 个答案:

答案 0 :(得分:4)

正如错误所述,您的函数readAll期望返回类型 Promise<any[]> 尝试在 readAll

中返回Promise
public readAll() : Promise < any[] > {
  return this.handler.getObject({
    Bucket: this.bucket,
    Key: this.tableName + '.json',
    ResponseContentType: 'text/plain'
  })
    .promise()
    .then(file => {
      const data: any[] = this._parseData(file.Body.toString());
      return data;
    })
    .catch(error => {
      return this.writeAll();
    });

}

答案 1 :(得分:0)

Andrii Nikolaienko的建议导致了一个有效的解决方案:

protected readAll( ) : Promise<any[ ]> {

  return new Promise( resolve => {

    this.handler.getObject( {
      Bucket              : this.bucket,
      Key                 : this.tableName + '.json',
      ResponseContentType : 'text/plain'
    } )
    .promise( )
    .then( file => { 

      const data : any[] = this._parseData( file.Body.toString( ) ); 
      resolve( data );
    } )
    .catch( error => {

      resolve( this.writeAll( [ ] ) );
    } )
  } );
}

感谢您的建议。