У меня есть пользовательский элемент управления Button, обработчик которого может вернуть обещание или аннулирование, как показано ниже:
// --- Options for button control
export interface buttonOptions {
aProperty: string
anotherProperty: number
onClick: Promise<IButtonClickResult> | void
}
// --- Click handler added for click event inside control class
protected clickHandler(): Promise<IButtonClickResult> | void {
if(returnsPromise) displaySpinner()
various operations
this.options.onClick(this)
}
Элемент управления создан с использованием шаблона построителя, поэтому он будет создан следующим образом:
buttonClass.build()
.options({
aProperty: 'Hope this works',
anotherProperty: 1,
onClick: () => {
return new Promise<IButtonClickResult>((resolve, reject) => {
// --- I suppose I could pass reference to resolve or reject to async function and allow that function to resolve or reject the promise
asyncOperation(resolve, reject)
}).then((result) => button.onClickSuccess(result)).catch((error) => button.onclickError(error))
onClick также может быть назначена функция, которая возвращает void как:
console.log('I was clicked')
Если обработчик кликов возвращает обещание, я хочу добавить спиннер к кнопке, пока обещание не разрешится или не отклонится,затем я заменю счетчик на исходное содержимое кнопки через .then или, может быть, через occ. 1010 *
Мой вопрос заключается в том, как определить, будет ли возвращено обещание в обработчике нажатия кнопки, чтобы я знал,не отображать счетчик на кнопке.
Любая помощь с благодарностью.Я пытался typeof и instanceof, но безрезультатно.Потенциально я не использовал их правильно?Мои извинения, я новичок в TypeScript и NodeJS.