在我的應用程式中,我想要一個不同的picker,有兩列或三列,所以我做了 2 個不同的函式來簡化代碼。現在我想在Validate button按下時回傳我的物件??和我的結果。我想我需要處理Promise,但我對它不太熟悉,我認為我做錯了什么。
這是我的服務中的功能:
async pickerTwoColumns(obj: objectTwoColumns ) {
this.clearObject(obj.firstColumnOptions);
this.clearObject(obj.secondColumnOptions);
let options: PickerOptions = {
//cssClass: 'picker',
backdropDismiss: false,
buttons: [
// {
// text: 'Annuler',
// role: 'cancel'
// },
{
text: 'Valider',
handler: () => {
return true;
}
}
],
columns:[
{
name:obj.firstColumnName,
selectedIndex: obj.firstColumnIndex,
suffix: obj.firstColumnSuffix,
options: obj.firstColumnOptions,
columnWidth: '5',
suffixWidth: '1',
prefixWidth: '10',
},
{
name:obj.secondColumnName,
selectedIndex: obj.secondColumnIndex,
suffix: obj.secondColumnSuffix,
options: obj.secondColumnOptions,
columnWidth: '10',
suffixWidth: '5',
prefixWidth: '100',
},
]
};
let picker = await this.pickerController.create(options);
picker.columns[0].options.forEach(element => {
delete element.selected;
delete element.duration;
delete element.transform;
});
// https://github.com/ionic-team/ionic-framework/issues/17664
picker.present();
picker.onDidDismiss().then(async data => {
let firstColumn = await picker.getColumn(obj.firstColumnName);
let secondColumn = await picker.getColumn(obj.secondColumnName);
obj.firstColumnTextValue = firstColumn.options[firstColumn.selectedIndex].text;
obj.secondColumnTextValue = secondColumn.options[secondColumn.selectedIndex].text;
obj.firstColumnIndex = firstColumn.selectedIndex;
obj.secondColumnIndex = secondColumn.selectedIndex;
//this.checkIfValidateOk();
})
console.log(obj);
}
因此,當用戶單擊“驗證器”時,我希望該函式至少為 true,最好的方法是回傳我的物件?? obj,因此單擊時我可以在使用像這樣的功能:
async sizePicker() {
await this.helpService.pickerTwoColumns(this.sizePickerObject).catch(resData => {
console.log(resData);
})
}
但是在我的主代碼中沒有任何反應,在單擊“Valider”之后,實際上我console.log在打開函式時得到了未定義的回傳值,sizePicker而我希望在"Valider"按下按鈕時發生一些事情......
謝謝你的幫助。
uj5u.com熱心網友回復:
您可以像這樣將Promise與 async 一起使用。我無法執行您的代碼,因為我沒有完整的類,但這應該會給您一個想法。
注意:我沒有修改驗證器方法,但是您可以使用我在下面概述的方法在處理程式中執行驗證作業并相應地解決或拋出錯誤。
首先要做的是在 pickerTwoColumns 中回傳一個 Promise:
async pickerTwoColumns(obj: objectTwoColumns ) {
return new Promise(resolve => {
this.clearObject(obj.firstColumnOptions);
this.clearObject(obj.secondColumnOptions);
然后,您將需要在選擇器 onDidDismiss 方法中決議承諾 --> 查找 resolve(obj) 呼叫
picker.onDidDismiss()
.then(async data => {
let firstColumn = await picker.getColumn(obj.firstColumnName);
let secondColumn = await picker.getColumn(obj.secondColumnName);
obj.firstColumnTextValue = firstColumn.options[firstColumn.selectedIndex].text;
obj.secondColumnTextValue = secondColumn.options[secondColumn.selectedIndex].text;
obj.firstColumnIndex = firstColumn.selectedIndex;
obj.secondColumnIndex = secondColumn.selectedIndex;
//this.checkIfValidateOk();
resolve(obj);
})
.catch((error)=> {
//handle error
})
最后,我也會在sizePicker方法中使用這種模式。您應該在 .then 方法中決議資料并在 .catch 中處理例外
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370252.html
