如何 return 在 ionic 4 中使用 alertcontroller 进行承诺?
How to return a promise with alertcontroller in ionic 4?
我正在尝试将此 ionic 3 代码转换为 ionic 4,但我不知道 promise 在 ionic 4 上的工作原理。我尝试查看文档,但找不到任何 promises 的解决方案
async generateAlert(header, message, ok, notOk): Promise<boolean> {
return new Promise((resolve, reject) => {
let alert = await this.alertController.create({
header: header,
message: message,
buttons: [
{
text: notOk,
handler: _=> reject(false)
},
{
text: ok,
handler: _=> resolve(true)
}
]
})
await alert.present();
});
}
如你所见here:
The await operator is used to wait for a Promise.
所以 await
只是另一种使用 promise 的方法,就像你在下面的例子中看到的那样:
// Method that returns a promise
private resolveAfter2Seconds(x: number): Promise<number> {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
// Using await
private async f1(): Promise<void> {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
// Not using await
private f2(): void {
resolveAfter2Seconds(10).then(x => {
console.log(x); // 10
});
}
在 f1(){...}
中,您可以看到应用程序如何在执行下一行代码之前等待承诺得到解决。这就是为什么你可以做类似
的原因
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
没有将 console.log(x)
放在 .then(() => {...})
块中。
在f2()
中因为我们不使用await
,app不会等到promise被resolved再执行下一行代码,所以我们必须使用then
在控制台打印结果:
resolveAfter2Seconds(10).then(x => {
console.log(x); // 10
});
话虽这么说,如果您只想创建一个在用户选择 ok
/notOk
按钮时显示警报和 returns true/false 的方法,您可以执行以下操作(根本不使用 await
):
private generateAlert(header: string, message: string, ok: string, notOk: string): Promise<boolean> {
return new Promise((resolve) => {
// alertController.create(...) returns a promise!
this.alertController
.create({
header: header,
message: message,
buttons: [
{
text: notOk,
handler: () => resolve(false);
},
{
text: ok,
handler: () => resolve(true);
}
]
})
.then(alert => {
// Now we just need to present the alert
alert.present();
});
});
}
然后你可以像这样使用那个方法
private doSomething(): void {
// ...
this.generateAlert('Hello', 'Lorem ipsum', 'Ok', 'Cancel').then(selectedOk => {
console.log(selectedOk);
});
}
我正在尝试将此 ionic 3 代码转换为 ionic 4,但我不知道 promise 在 ionic 4 上的工作原理。我尝试查看文档,但找不到任何 promises 的解决方案
async generateAlert(header, message, ok, notOk): Promise<boolean> {
return new Promise((resolve, reject) => {
let alert = await this.alertController.create({
header: header,
message: message,
buttons: [
{
text: notOk,
handler: _=> reject(false)
},
{
text: ok,
handler: _=> resolve(true)
}
]
})
await alert.present();
});
}
如你所见here:
The await operator is used to wait for a Promise.
所以 await
只是另一种使用 promise 的方法,就像你在下面的例子中看到的那样:
// Method that returns a promise
private resolveAfter2Seconds(x: number): Promise<number> {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
// Using await
private async f1(): Promise<void> {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
// Not using await
private f2(): void {
resolveAfter2Seconds(10).then(x => {
console.log(x); // 10
});
}
在 f1(){...}
中,您可以看到应用程序如何在执行下一行代码之前等待承诺得到解决。这就是为什么你可以做类似
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
没有将 console.log(x)
放在 .then(() => {...})
块中。
在f2()
中因为我们不使用await
,app不会等到promise被resolved再执行下一行代码,所以我们必须使用then
在控制台打印结果:
resolveAfter2Seconds(10).then(x => {
console.log(x); // 10
});
话虽这么说,如果您只想创建一个在用户选择 ok
/notOk
按钮时显示警报和 returns true/false 的方法,您可以执行以下操作(根本不使用 await
):
private generateAlert(header: string, message: string, ok: string, notOk: string): Promise<boolean> {
return new Promise((resolve) => {
// alertController.create(...) returns a promise!
this.alertController
.create({
header: header,
message: message,
buttons: [
{
text: notOk,
handler: () => resolve(false);
},
{
text: ok,
handler: () => resolve(true);
}
]
})
.then(alert => {
// Now we just need to present the alert
alert.present();
});
});
}
然后你可以像这样使用那个方法
private doSomething(): void {
// ...
this.generateAlert('Hello', 'Lorem ipsum', 'Ok', 'Cancel').then(selectedOk => {
console.log(selectedOk);
});
}