使用承诺捕获收盘

时间:2015-07-24 11:39:38

标签: javascript angularjs twitter-bootstrap promise angular-ui-bootstrap

我有一个问题,因为我需要在关闭ui-bootstrap模式时执行一个方法(并且已完成动画)。我不知道如何正确地写下这个承诺。我到目前为止(在TypeScript中):

public open(attrs, opts) {
    var scope = this.rootScope.$new();
    angular.extend(scope, attrs);

    opts = angular.extend(opts || {}, {
        backdrop: false,
        scope: scope,
        templateUrl: 'splash/content.html',
        windowTemplateUrl: 'splash/index.html'
    });

    this.modalInstance = this.modal.open(opts);

    this.modalInstance.result.then(
        function() {
            console.log("1");
        },
        function() {
            console.log("2");
        },
        function() {
            console.log("3");
        });
}

public close() {
    if (this.modalInstance != null && this.modalInstance != undefined) {
        this.modalInstance.close();
    }
}

我已经尝试将.result附加到close方法但显然没有退出:似乎只有open方法返回一个promise。谁能帮我吗?只有" 1"在控制台中显示,我认为这是公开的决心。

1 个答案:

答案 0 :(得分:0)

angular-ui-bootstrap模态结果属性返回您发现的promise。如果模态被关闭(确认/是),则承诺得到解决,但如果模态被解除则承诺被拒绝(单击模态/取消之外)。

如果你想在模态关闭后调用多个函数,你可以用额外的.then()调用来链接它们。

您可以使用.catch()查看该模式是否已取消/解除。

def unqueue():
    while not queue.empty():
        myList = queue.get()
        for i in myList:
            if not i.boolean:
                break
            i.boolean = False
            i.save()   # <== error because database table is locked
        queue.task_done()


queue = Queue()

thread = Thread(target=unqueue)
thread.start()

def addToQueue(pk_list): # can be called multiple times simultaneously
    list = []
    for pk in pk_list:
        list.append(MyModel.objects.get(pk=pk))
    queue.put(list)