我有一个问题,当我尝试从方法返回一个值返回为undefined时,这是方法:
getBrandName(keyVehicle): any{
var nameBrand;
let response=this.db.getBrand(keyVehicle);
response.then((value)=>{
nameBrand= value.name;
})
return nameBrand;
}
inside方法我得到了值,但是当返回值时,这个未定义,请帮助我。
答案 0 :(得分:0)
有几种方法可以做到这一点。
1)退还承诺。 您可以返回promise并在调用此函数的代码中等待completition。
getBrandName(keyVehicle): any {
return this.db.getBrand(keyVehicle).then((value) => value.name);
}
// from other place
this.getBrandName("foo").then(nameBrand => console.log(nameBrand));
2)通过回调(这可能不是一个好主意,但有机会,所以你可以这样做。)
getBrandName(keyVehicle, callback): any {
this.db.getBrand(keyVehicle)
.then((value) => value.name)
.then(brandName => callback(brandName));
}
// from other place
this.getBrandName("foo", brandName => console.log(brandName));
3)使用async/await
(可能是推荐的方式)
async getBrandName(keyVehicle): any {
const response = await this.db.getBrand(keyVehicle);
return response.name;
}
无论哪种方式,请记住这是一个纯粹的Javascript / Promise问题,无论您使用的是角度,火焰基础还是任何其他工具。
答案 1 :(得分:0)
这是正确的。如果您立即返回nameBrand
,由于var nameBrand
,初始值为空。
只有在调用response.then
时,才会填充局部变量nameBrand
。
您可以尝试以下方法,
export class ABC {
nameBrand = [];
getBrandName() {
this.db.getBrand().then((value) => {
this.nameBrand = value;
}
}
}
但在this.nameBrand
来电完成后,您仍会收到http
,而不是仅在getBrandName()
之后。
有道理,这是async
电话。