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