Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何声明任何对象数组的承诺返回_Typescript_Promise - Fatal编程技术网

Typescript 如何声明任何对象数组的承诺返回

Typescript 如何声明任何对象数组的承诺返回,typescript,promise,Typescript,Promise,我尝试从方法中定义返回,该方法将返回对象数组的承诺: public readAll( ) : Promise<any[]> { this.handler.getObject( { Bucket : this.bucket, Key : this.tableName + '.json', ResponseContentType : 'text/plain' } ) .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( );
  } );
}
public readAll():承诺{
此.handler.getObject({
水桶:这个,水桶,
Key:this.tableName+'.json',
ResponseContentType:“文本/普通”
} )
.承诺
.then(文件=>{
const data:any[]=this._parseData(file.Body.toString());
返回新承诺((解析)=>数据);
} )
.catch(错误=>{
返回这个.writell();
} );
}
但是,我面临一个错误“[ts]一个声明类型既不是'void'也不是'any'的函数必须返回一个值。”


我做错了什么?

正如错误所说,您的函数readAll期望返回类型为
Promise
尝试在
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();
    });

}
public readAll():Promise{
返回this.handler.getObject({
水桶:这个,水桶,
Key:this.tableName+'.json',
ResponseContentType:“文本/普通”
})
.承诺
。然后(文件=>{
const data:any[]=this._parseData(file.Body.toString());
返回数据;
})
.catch(错误=>{
返回这个.writeAll();
});
}

正如错误所述,函数readAll期望返回类型为
Promise
尝试在
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();
    });

}
public readAll():Promise{
返回this.handler.getObject({
水桶:这个,水桶,
Key:this.tableName+'.json',
ResponseContentType:“文本/普通”
})
.承诺
。然后(文件=>{
const data:any[]=this._parseData(file.Body.toString());
返回数据;
})
.catch(错误=>{
返回这个.writeAll();
});
}

安德烈·尼古拉连科的建议将导致一个有效的解决方案:

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( [ ] ) );
    } )
  } );
}
protectedreadall():承诺{
返回新承诺(解决=>{
此.handler.getObject({
水桶:这个,水桶,
Key:this.tableName+'.json',
ResponseContentType:“文本/普通”
} )
.承诺
.then(文件=>{
const data:any[]=this._parseData(file.Body.toString());
解析(数据);
} )
.catch(错误=>{
解析(this.writeAll([]);
} )
} );
}

感谢您的建议。

安德烈·尼古拉连科的建议会带来一个有效的解决方案:

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( [ ] ) );
    } )
  } );
}
protectedreadall():承诺{
返回新承诺(解决=>{
此.handler.getObject({
水桶:这个,水桶,
Key:this.tableName+'.json',
ResponseContentType:“文本/普通”
} )
.承诺
.then(文件=>{
const data:any[]=this._parseData(file.Body.toString());
解析(数据);
} )
.catch(错误=>{
解析(this.writeAll([]);
} )
} );
}

谢谢您的建议。

您没有从函数
readAll
返回
Promise
。将
返回此.handler.getObject(…
添加
返回新承诺(
);放在方法末尾,因为并非所有代码都返回值。添加返回新承诺();解决问题-谢谢您希望
返回数据
而不是
返回新承诺((解析)=>数据);
,在承诺链之前还有一个
return
。您没有从函数
readAll
返回一个
promise
。put
返回这个.handler.getObject(…
Add
returnnewpromise(=>)
在方法末尾,因为不是所有代码都返回值。添加返回新承诺(=>);解决问题-谢谢您希望
返回数据
而不是
返回新承诺((解析)=>数据);
,并且在您的承诺链之前还有一个
返回
。我没有投反对票,但答案不够清楚,代码被截断。
返回新承诺(\u=>)
绝对是垃圾。我在编辑时发布了一个错误的代码,这是我发布的最初答案:)对于Bergi antipatern评论后的混乱,我很抱歉-你的建议是正确的,我没有投反对票,但答案不够清楚,代码被截断。
返回新承诺(\u=>\ uuux)
绝对是垃圾。我在编辑时发布了一个错误的代码,这是我发布的最初答案:)对于Bergi antipatern评论后的混乱,很抱歉-您的建议是避免错误的方法!感谢您的反模式警告-重构后,我得到了更好的代码,看起来完全像Sajeetharan Answer!谢谢你的反模式警告-重构后我得到了更好的代码,看起来和Sajeetharan的答案一模一样