问题很明显,我需要显示一个包含火力列表列表元素的警报。
警报创建
let alert = this.alertCtrl.create({
title: 'Elegir repartidor',
inputs: [],
buttons: [
{
text: 'Asignar',
handler: data => {
this.firebaseService.updateOrderAssignDeliverymen(orderKey, data);
},
role: 'cancel'
}
]
});
this.firebaseService.getDeliveryMenFillAlert(alert).then(res => alert.present());
警报输入创建
getDeliveryMenFillAlert(alert: AlertController) {
this.afd.list('/users', ref => ref.orderByChild('role').equalTo('Repartidor'))
.snapshotChanges()
.subscribe( res =>
res.map(action => {
alert.addInput({
type: 'radio',
label: action.payload.val().name,
value: action.key
})
}),
error => console.log(error));
}
在阅读了很多问题之后,对于不同方法的数量感到非常惊讶......而且更让我感到惊讶的是,我无法用一个方法取得成功。
首次尝试
创建了第二个带有简单承诺的函数返回尝试。一切正常。
getDeliveryMenFillAlert2(alert: AlertController) {
return Promise.resolve(true);
//return Promise.reject(false);
}
this.firebaseService.getDeliveryMenFillAlert2(alert)
.then(resolve => console.log('Resolve: ' + resolve),
reject => console.log('Reject: ' + reject));
第二次尝试
尝试在原始函数中插入此简单返回,当然更改对此原始函数的调用。
getDeliveryMenFillAlert(alert: AlertController) {
this.afd.list('/users', ref => ref.orderByChild('role').equalTo('Repartidor'))
.snapshotChanges()
.subscribe( res =>
res.map(action => {
alert.addInput({
type: 'radio',
label: action.payload.val().name,
value: action.key
});
return Promise.resolve(true);
}),
error => {
console.log(error)
return Promise.reject(false);
});
}
但是抛出错误“TypeError:无法读取属性”,然后是“未定义”。
第三次尝试
为函数添加了返回Promise。同样的错误。
getDeliveryMenFillAlert(alert: AlertController): Promise {
第四次尝试 阅读其中介绍async / await概念的一个问题,所以我向函数引入了“async”并且“等待”了响应。
async getDeliveryMenFillAlert(alert: AlertController): Promise {
return await Promise.resolve(true);
重新提出另一个错误“未捕获错误:模块解析失败:关键字'yield'已保留”。
上次尝试
不知道为什么但只是删除了“await”但在函数中保持“async”,它不会检索任何错误(很棒)但调用的console.log会打印“Resolve:undefined”。
所以它似乎正在解决但不起作用。
我还尝试返回“新Promise ...”和“true.toPromise()”而不是“return Promise.resolve(true)”,我在某处读到它但没有任何工作。请帮助,我努力但不能。
最终解决方案(不能将其作为回复发布)
getDeliveryMenFillAlert(alert: AlertController) {
return new Promise(resolve => {
this.afd.list('/users', ref => ref.orderByChild('role').equalTo('Repartidor'))
.snapshotChanges()
.subscribe( res =>
res.map(action => {
alert.addInput({
type: 'radio',
label: action.payload.val().name,
value: action.key
});
resolve(alert);
}))
});
}
,电话会是:
this.firebaseService.getDeliveryMenFillAlert2(alert)
.then(resolve => alert.present());
答案 0 :(得分:0)
我猜你在这次电话会议后正在呼叫alert.present()
:
this.firebaseService.getDeliveryMenFillAlert(alert);
如果是这样,您可能希望在显示警报之前等待回调结束。
inputs
之后显示提醒:alert.addInput({
type: 'radio',
label: action.payload.val().name,
value: action.key
});
alert.present();
getDeliveryMenFillAlert
函数返回承诺。并在成功回调中调用alert.present()
:this.firebaseService.getDeliveryMenFillAlert(alert)
.then(res => alert.present());