我正在尝试在打字稿中创建一个对话框系统。
预期用途是呼叫者会做这样的事情;
dialogBox.showDialog().then((result: DialogResult) => {
// Handle the dialog result
});
我的DialogBox
类可能会有类似的方法;
private promise : Q.Promise<DialogResult>;
public showDialog() : Q.Promise<DialogResult>{
this.promise = ... // How to create this promise?
return this.promise;
}
public void setResult(result : DialogResult){
// What to do here?
}
每当用户单击对话框中的按钮时,都会调用类似的内容;
dialogBox.setResult(theResult);
然后,这应该解决/履行showDialog
方法创建的承诺。
但我无法确定Q是否可以实现这一点,以及如何实现showDialog
和setResult
的(与承诺相关的部分)。有人有任何想法吗?
完整性更新;感谢Bergi,这是我最后的工作代码。使用延迟
结束export class DialogBox implements INotification {
private deferred: Q.Deferred<DialogResult>;
constructor(public message: string,
public header: string,
public buttons?: DialogResult[]) {
}
public showDialog(): Q.Promise<DialogResult> {
this.deferred = Q.defer<DialogResult>();
// My logic for displaying the box goes here
return this.deferred.promise;
}
public setResult(result: DialogResult) {
this.deferred.resolve(result);
}
}
答案 0 :(得分:1)
您要么使用存储为班级私人字段的deferred,要么使用Promise
constructor(首选)。
private deferred : Q.Deferred<DialogResult>;
public showDialog() : Q.Promise<DialogResult>{
this.deferred = Q.defer();
// create dialog
return this.deferred.promise;
}
public void setResult(result : DialogResult){
this.deferred.resolve(result);
}
public showDialog() : Q.Promise<DialogResult>{
return new Q.Promise(function(resolve) {
// create dialog
setResult = resolve;
// call it somewhere
})
}